In [11]:
import numpy as np
import pandas as pd
import tensorflow_hub as hub
import tensorflow_text
from tensorflow.keras.models import Sequential, load_model
from sklearn.model_selection import train_test_split
from sklearn.metrics import pairwise_distances, silhouette_score
from sklearn.preprocessing import normalize
from sklearn.cluster import KMeans
from sklearn.utils import shuffle
from skimage.transform import resize
import networkx as nx
from node2vec import Node2Vec
import matplotlib.pyplot as plt
import seaborn as sns
import umap
from termcolor import colored
from tqdm.notebook import tqdm
import re
import nltk
import pickle
import swifter
import random
from os import listdir
from os.path import isfile, join
from collections import Counter
from random import randint
def getRoundedThresholdv1(a, MinClip):
    return round(float(a) / MinClip) * MinClip
In [271]:
def load_all_models(verbose=True):
    cluster_seq_emb = load_model('cluster_seq_emb.h5')
    if verbose:
        print('dialog embeder is here')
    with open('kmeans_phrases.pkl', 'rb') as f:
        clust_model_kmeans = pickle.load(f)
    with open('kmeans_phrases_names.pkl', 'rb') as f:
        cluster_names = pickle.load(f)
    if verbose:
        print('sent cluster model is here')
    with open('kmeans_seqs.pkl', 'rb') as f:
        ngram_kmeans = pickle.load(f)
    with open('kmeans_seqs_names.pkl', 'rb') as f:
        ngram_clusters_names = pickle.load(f)
    if verbose:
        print('dialog cluster model is here')
    embed = hub.load("https://tfhub.dev/google/universal-sentence-encoder-multilingual-large/3")
    if verbose:
        print('thats all')
    return cluster_seq_emb, clust_model_kmeans, cluster_names, ngram_kmeans, ngram_clusters_names, embed
cluster_seq_emb, clust_model_kmeans, cluster_names, ngram_kmeans, ngram_clusters_names, embed = load_all_models(verbose=True)
WARNING:tensorflow:No training configuration found in save file: the model was *not* compiled. Compile it manually.
WARNING:tensorflow:No training configuration found in save file: the model was *not* compiled. Compile it manually.
dialog embeder is here
sent cluster model is here
dialog cluster model is here
thats all
In [2]:
import tensorflow_hub as hub
import numpy as np
import tensorflow_text
# Some texts of different lengths.
english_sentences = ["dog", "Puppies are nice.", "I enjoy taking long walks along the beach with my dog."]
italian_sentences = ["cane", "I cuccioli sono carini.", "Mi piace fare lunghe passeggiate lungo la spiaggia con il mio cane."]
japanese_sentences = ["犬", "子犬はいいです", "私は犬と一緒にビーチを散歩するのが好きです"]
embed = hub.load("https://tfhub.dev/google/universal-sentence-encoder-multilingual-large/3")
# Compute embeddings.
en_result = embed(english_sentences)
it_result = embed(italian_sentences)
ja_result = embed(japanese_sentences)
# Compute similarity matrix. Higher score indicates greater similarity.
similarity_matrix_it = np.inner(en_result, it_result)
similarity_matrix_ja = np.inner(en_result, ja_result)
In [3]:
dramas = [f for f in listdir('drama/') if isfile(join('drama/', f))]
dramas_texts = []
for drama in dramas:
    with open(join('drama/', drama), 'rb') as f:
        dramas_texts.append(pickle.load(f))
dramas_texts[0][0][:5]
Out[3]:
[('Григорий', 'Ступай отвори дверь! звонят!'),
 ('Петр',
  'Да ты что сидишь? На ногах у тебя пузыри, что ли? встать не можешь?'),
 ('Иван', 'Ну, уж я пойду, так и быть, отворю! Это Андрюшка!'),
 ('Григорий', 'А, московская ворона! Откуда тебя принесло?'),
 ('Чужой слуга',
  'Ах ты, чухонский сын! Побегал бы ты с мое. Вот к цветочнице велела снесть, что на Петербургской. Небось четвертака на извозчика не\n            даст. Да и к вашему тож. Что, спит?')]
In [4]:
df_with_years = pd.read_csv('dracor-rus-list.csv', sep=',')
df_with_years.fillna(1000000, inplace=True)
df_with_years['year'] = df_with_years.apply(lambda x: min(x.written, x.premiered, x.printed), axis=1)
df_with_years['name'] = [link.split('/')[-1] for link in df_with_years['link']]
name_to_year = {name: year for name, year in zip(df_with_years['name'], df_with_years['year'])}
years = [name_to_year[name.split('.')[0]] for name in dramas]
years[:5]
Out[4]:
[1840.0, 1850.0, 1765.0, 1851.0, 1850.0]
In [421]:
?sns.distplot
In [428]:
fig, ax = plt.subplots()
fig.set_size_inches(10, 5)
years_rnd = [getRoundedThresholdv1(year, 5) for year in years]
sns.distplot(years_rnd, bins=40, kde=False, color='indigo')
Out[428]:
<matplotlib.axes._subplots.AxesSubplot at 0x1aa214a090>
In [5]:
only_sents = []
for drama in tqdm(dramas_texts):
    for part in drama:
        only_sents = only_sents + [sent for _, sent in part]
only_sents = [sent for sent in only_sents if len(nltk.word_tokenize(sent))>0]
only_sents[:5]

Out[5]:
['Ступай отвори дверь! звонят!',
 'Да ты что сидишь? На ногах у тебя пузыри, что ли? встать не можешь?',
 'Ну, уж я пойду, так и быть, отворю! Это Андрюшка!',
 'А, московская ворона! Откуда тебя принесло?',
 'Ах ты, чухонский сын! Побегал бы ты с мое. Вот к цветочнице велела снесть, что на Петербургской. Небось четвертака на извозчика не\n            даст. Да и к вашему тож. Что, спит?']
In [6]:
def get_sent_vector(sent):
    return np.array(embed([sent])[0])
get_sent_vector('Извольте, сударь')
Out[6]:
array([ 0.05614524, -0.06372134, -0.04249236, -0.00860117,  0.099751  ,
       -0.03129876,  0.04538656, -0.04919943, -0.00468883, -0.04281916,
        0.00877393,  0.04038748,  0.03681923, -0.05460533, -0.05094891,
       -0.01137543, -0.04485055, -0.03386084, -0.04103753,  0.03279722,
        0.03033264, -0.02919887,  0.03824612,  0.00337121,  0.01464133,
        0.00394431,  0.03056543, -0.00661694, -0.03457826, -0.01276411,
       -0.04666232,  0.06918392, -0.02308636, -0.104785  ,  0.01230131,
        0.00352046, -0.03369291, -0.01252667,  0.00055712, -0.0655474 ,
       -0.07604638, -0.00435911,  0.01967839,  0.01947444, -0.00258026,
       -0.01717229, -0.02072494, -0.05446532,  0.04609558,  0.04664139,
        0.00851444, -0.00724988, -0.05243349,  0.02848341, -0.05960152,
       -0.00139306, -0.08780015,  0.01847332, -0.0373492 , -0.02808224,
        0.00371374, -0.00462835,  0.04551379, -0.0281018 ,  0.01165996,
        0.022906  ,  0.05685975,  0.0150128 ,  0.00487473,  0.00468308,
       -0.04603244, -0.01896176, -0.02552907,  0.02978918, -0.01834379,
        0.05886516,  0.02905273, -0.07007279, -0.04342018,  0.00196855,
        0.01715027, -0.05631416, -0.13046773, -0.00655648,  0.12547758,
       -0.00545323, -0.03204378, -0.0327934 ,  0.05008442, -0.01635541,
        0.03300392, -0.04499119,  0.01951901,  0.09773668,  0.01103191,
        0.14412807, -0.02300894, -0.03356245, -0.08727402, -0.08579743,
        0.00153528, -0.02849563,  0.04333505,  0.00557944, -0.00355407,
        0.00995606, -0.0068831 ,  0.00089882,  0.00110162, -0.01310272,
       -0.03241942,  0.11069877, -0.06400894,  0.08997482,  0.0969893 ,
       -0.01852288, -0.00283469,  0.02499283,  0.13579182, -0.01676258,
        0.05479094,  0.01139818, -0.02308507, -0.00160411, -0.07724163,
       -0.04863114,  0.03864694, -0.05647557,  0.08028349, -0.01970065,
       -0.01502722, -0.02053608,  0.02422605,  0.0210393 , -0.00580976,
       -0.01889556,  0.03445789,  0.0922482 , -0.06556892, -0.0117927 ,
       -0.01125147, -0.00543666,  0.00221159,  0.01214857, -0.01742548,
       -0.00125641, -0.03161241,  0.10325191, -0.03589537, -0.01025067,
       -0.03928936, -0.12319773,  0.02249455,  0.00328936, -0.05103559,
        0.084305  , -0.07837613,  0.01055775,  0.05977298, -0.0030706 ,
       -0.01665954,  0.0151799 , -0.06407382, -0.00827827,  0.0103708 ,
       -0.04389594, -0.0127273 , -0.00869003,  0.036595  ,  0.00815248,
       -0.09942202,  0.12756008, -0.10210753, -0.04678331,  0.02122581,
        0.00505215, -0.06196558, -0.03416483, -0.02632345, -0.01525282,
        0.06524679, -0.04635965,  0.0622347 , -0.02330668,  0.0659297 ,
        0.01310478, -0.06351823,  0.00642638,  0.03468065, -0.09687813,
        0.04050504, -0.00836584, -0.1561575 ,  0.01232008, -0.08936807,
       -0.02412317, -0.07591567,  0.01239196,  0.02155357, -0.03908998,
        0.03073455, -0.12185301, -0.03695946, -0.03234605, -0.01970352,
        0.02473839, -0.00327104,  0.0181135 , -0.02138115, -0.05190191,
       -0.02712778,  0.03773762, -0.01171641, -0.02946129, -0.03588546,
       -0.01504809, -0.00527075, -0.00682317, -0.01653897, -0.01323775,
        0.02236585,  0.05699201,  0.05272741,  0.02791468,  0.00460799,
        0.00573527, -0.01031395,  0.02253961,  0.09082794,  0.05813881,
        0.00229721,  0.05723893, -0.06140306, -0.00132849, -0.0196851 ,
        0.0158288 ,  0.04977074,  0.04558134,  0.0297328 ,  0.05739529,
        0.01385854, -0.10995509,  0.01984707,  0.00826998,  0.02145976,
        0.07131053,  0.02200381,  0.06847341,  0.00721208,  0.11023593,
       -0.02173766,  0.01982537,  0.05896651,  0.05419   ,  0.00299851,
       -0.01077938, -0.01171858,  0.04350194, -0.02218439, -0.04858944,
        0.02045712,  0.04143567, -0.02539144,  0.00180448, -0.03660053,
        0.01441557, -0.06657729, -0.04362371, -0.06116519, -0.03498773,
       -0.03838906,  0.01305194,  0.00303489, -0.0373639 ,  0.04754184,
       -0.00726828,  0.04481571, -0.01452711, -0.03418475, -0.02421807,
       -0.04340651,  0.05731265, -0.02901723, -0.01443725,  0.05463824,
       -0.08793933,  0.02404709,  0.03755073, -0.01884006, -0.03184816,
       -0.0498483 , -0.039013  , -0.06343773, -0.03714412,  0.01549786,
       -0.07016809, -0.02098417, -0.00989495, -0.03994239, -0.09977061,
        0.02783154, -0.00359024, -0.00965418, -0.08158281,  0.05218006,
        0.00373911, -0.03504323,  0.02254537, -0.03433791,  0.03284122,
        0.03516841,  0.02488674,  0.0408372 ,  0.06190436,  0.0304133 ,
        0.02004611, -0.02171875, -0.0083636 ,  0.05027406,  0.05266288,
       -0.02210637,  0.0451086 ,  0.04443129,  0.00642536, -0.02534227,
        0.03458475,  0.03628874,  0.02851842, -0.03644338, -0.03957916,
       -0.05515654, -0.06049433,  0.00724417,  0.0218444 , -0.00667217,
        0.02939211, -0.02406825,  0.03923436,  0.05728266,  0.00555186,
       -0.00110906, -0.04780317, -0.01863755, -0.04423754,  0.07777044,
       -0.03392594, -0.06413219, -0.00555901,  0.00834572, -0.04357005,
        0.02027591, -0.00813486, -0.01772508, -0.02474973, -0.02909577,
       -0.02200102,  0.03991167, -0.02533843,  0.00034572, -0.08616655,
       -0.0077988 ,  0.00294997, -0.02517433, -0.02305624,  0.02212421,
        0.05488839, -0.01338382,  0.05191684,  0.00547889,  0.01696836,
       -0.02136989,  0.02264226,  0.02875312, -0.02091669, -0.0071906 ,
       -0.04567013, -0.05595655,  0.01424481, -0.00657368,  0.02805261,
        0.03723355, -0.00856028,  0.13019665, -0.01310977,  0.06418864,
        0.01462717,  0.02173442, -0.05579089,  0.01029579, -0.00411614,
        0.00829514, -0.06234485,  0.00579679,  0.00271663,  0.00293693,
       -0.04348321, -0.03685496, -0.00161608,  0.02005042, -0.03172929,
        0.03389821, -0.0776149 , -0.01997925,  0.01672946,  0.03413612,
       -0.00452668,  0.00399729,  0.02864445, -0.0880338 ,  0.04101346,
        0.11445373,  0.02100429,  0.03024794, -0.01725511, -0.03849838,
       -0.03021074,  0.01109074, -0.04580181, -0.02636301, -0.00751084,
       -0.02446014, -0.02469045, -0.0410148 , -0.04016978,  0.04170037,
       -0.02449824, -0.0052212 , -0.04894319, -0.07614554,  0.03071193,
       -0.01366904, -0.00912027,  0.02735923, -0.01591278, -0.03975391,
       -0.00160555,  0.01463316,  0.02439487, -0.04139147,  0.00538387,
        0.00043563, -0.09754492,  0.04766281,  0.05610129, -0.036172  ,
        0.02463053,  0.00045301,  0.02484838,  0.04179561,  0.02459662,
       -0.00474491,  0.06402494, -0.04611202,  0.01940687, -0.0805164 ,
        0.08840191, -0.00499376,  0.07711461,  0.00605777,  0.01982611,
        0.03904611, -0.02587119, -0.01777412,  0.07652572, -0.03116536,
        0.005511  , -0.04727048, -0.00123715,  0.00883566, -0.01144171,
        0.00444766, -0.01394632, -0.02881627, -0.00304182, -0.02116185,
        0.07733759,  0.01077126, -0.02972537, -0.04204752, -0.02616563,
       -0.01429544, -0.04362101,  0.09300138, -0.02717148,  0.02065735,
        0.06150059,  0.00734712,  0.01308033,  0.02548814,  0.04058107,
        0.00615456,  0.01418428,  0.03952074,  0.06143244, -0.05142348,
        0.01919278, -0.02477438,  0.00370299, -0.00993814, -0.12648727,
        0.06198723, -0.05561349,  0.02963735, -0.01914194, -0.01947886,
        0.02446027, -0.03538484, -0.05244306,  0.00502671, -0.02119402,
       -0.01667828, -0.02610468], dtype=float32)
In [ ]:

In [ ]:

In [ ]:

In [ ]:
vectors = [get_sent_vector(sent) for sent in tqdm(only_sents)]
sent_to_vector_dict = {sent: vec for sent, vec in tqdm(zip(only_sents, vectors))}
In [94]:
# for clust_num in [5, 10, 20, 40, 60, 100, 200]:
for clust_num in [50]:
#     clust_model_kmeans = KMeans(n_clusters=clust_num, random_state=42, precompute_distances=True)
#     clust_model_kmeans.fit(vectors)
    clusters = clust_model_kmeans.predict(vectors)
#     print('{}: {}'.format(clust_num, silhouette_score(X, clusters)))
In [95]:
sents_with_clusters = list(zip(only_sents, clust_model_kmeans.predict(vectors)))
In [ ]:
# cluster_names = {}
for curr_cluster in [37]:
    print(curr_cluster)
    sents_in_this_cluster = [sent for sent, cluster in sents_with_clusters if cluster==curr_cluster]
    for sent in random.choices(sents_in_this_cluster, k=20):
        print(sent)
    cluster_names[curr_cluster] = input()
    print('=========================\n=========================\n=========================\n\n\n')
cluster_names
In [15]:
def cluster_text(per_text, cluster_model, cluster_names={}, sent_to_vector_dict={}):
    output = []
    all_clusters = []
    for person, sent in per_text:
        if sent in sent_to_vector_dict:
            sent_vec = sent_to_vector_dict[sent]
        else:
            sent_vec = get_sent_vector(sent)
        if sent_vec is not None:
            cluster =  clust_model_kmeans.predict([sent_vec])[0]
            sents = {sent: cluster}
            output.append((person, sents))
            all_clusters.append(cluster)
    return output, all_clusters
parsed_text, _ = cluster_text(dramas_texts[201][2], clust_model_kmeans, sent_to_vector_dict=sent_to_vector_dict)
for person, rep in parsed_text:
    print(person)
    for phrase in rep:
        print(phrase + ': ' + colored(rep[phrase], 'red'))
    print('\n')
Федор
Вот уж который день, брат Христиан, Мы сходимся с тех пор, как ты помолвлен Со Ксенией, и каждый раз тебя, Мне кажется, мы оба больше любим, Могли б тебя мы слушать без конца, Но ты досель о родине нам только Рассказывал своей…: 11
Ксения
Да, королевич, Пора, чтоб ты нам о себе поведал. Уже давно спросить тебя хочу я: Как вырос ты? И как доселе жил? И как во Фландрии сражался?: 4
Федор
Все, Все расскажи нам, Христиан. Мы стали Теперь с тобой родные; вместе нам Пришлося жить, так надо знать друг друга!: 4
Ксения
Начни сначала. Детство нам свое Сперва скажи!: 1
Христиан
Несложная то повесть, Царевна, будет: мой отец, король, Со мной простясь, услал меня ребенком Из города в норвежский дальний замок И указал там жить — зачем? — не знаю. Мрачны картины первых лет моих: Среди туманов северной природы, Под шум валов и сосен вековых Прошли мои младенческие годы. Мне помнятся раскаты непогоды, Громады гор, что к небу вознеслись, С гранитных скал струящиеся воды И крутизна, где замок наш повис. Ребенком там, в мечтанье одиноком, Прибою моря часто я внимал Или следил за ним веселым оком, Когда в грозу катил за валом вал И, разбиваясь о крутые стены, Отпрядывал потоком белой пены. И с ранних пор сказанья старины, Морских бойцов походы и сраженья Отважные мне навевали сны, И вдаль меня манили приключенья. В один покой случайно я проник; Висели латы там под слоем пыли, А на столе лежало много книг — Норвежские то летописи были. Я стал читать — и ими, как огнем, Охвачен был сильнее с каждым днем, И ярче все являлись мне виденья: Богатыри, и схватки, и сраженья. Так время шло. Четырнадцати лет Я призван был в столицу. Новый свет Открылся мне. Я с радостию детской Предался жизни суетной и светской — Но ненадолго. Праздности моей Стыдиться стал я скоро. Прежних дней Воскресли сны и прежние виденья: Все те же сечи, схватки и сраженья. И думал я: настанет ли тот день, Когда мечта, которую с любовью Я все ловлю, как веющую тень, Оденется и плотию и кровью? И он настал. Вскипел великий бой, Священный бой за веру и свободу: Испании владыка встал войной, Грозя цепями вольному народу. Во Фландрию тогда Европы всей Стекалися единоверных рати — И из тюрьмы я вырвался моей На выручку преследуемых братий.: 47
Федор
Да, Христиан, мы слышали про то, Как ты с испанцем бился под Остендом. Счастлив же ты! Тебе уж двадцать лет! Ты мог уже свои изведать силы, Ты сам себя на деле испытал — А я!: 46
Христиан
Тебе, царевич, суждена Блистательнее доля. Ты стоишь Близ своего отца, чтоб у него Державою учиться управлять, Как те князья, которые отвсюду Съезжалися в испанский стан, учиться У Спинолы, у пармского вождя, Как управлять осадою.: 22
Федор
Ты прав; Отца пример перед собою видеть — То счастье для меня, и лучшей доли Я б не желал, как только научиться Ему в великом деле помогать. Но не легко дается та наука, А праздным быть несносно. Ты ж успел Узнать войну, ты отражал осаду, Ты слышал пушек гром, пищалей треск, Вокруг тебя летали ядра…: 46
Христиан
Да, И я узнал, что мужество и сила Должны теперь искусству уступать; Что не они уже решают битвы, Как в славные былые времена, И грустно мне то стало. Но меня Поддерживала мысль, что я служу Святому делу.: 11
Ксения
И за это мне Ты, королевич…: 22
Федор
Сразу полюбился? Так, Ксенья?: 41
Ксения
Так. Но я бы знать хотела, Его спросить хотела б я: как он Чужую мог заочно полюбить?: 41
Христиан
Легко мне дать ответ тебе, царевна: Ты не была чужая для меня! Царя Бориса чтит весь мир. Далеко О нем молва в Европе разнеслась; Кому ж его вблизи случалось видеть, Обвороженный возвращался тот На родину; но прославлял он столь же Величие правителя Русии, Сколь совершенства дочери его. Кто б ни был то, посланник, или пленный, Или купец ганзейский,— ни один Не забывал царевну Ксенью славить, Ее красу и ум превозносить И неземную, ангельскую кротость. Рассказы те в мою запали душу; А дальний твой, несхожий с нашим край, Все, что молва о нем к нам приносила: Разливы рек, безбережные степи, Снега и льды, обычай, столь отличный От нашего; державы христианской Азийский блеск, с преданьями отцов Нам общими,— все это, как нарочно, Набросило волшебный некий свет На образ твой. Ты мне предстала тою, С кем связан я таинственной судьбою… Тебя добыть не мыслил я тогда, Но образ твой светил мне как звезда, Приковывал мои невольно взоры — И в шуме битв, в пылу кипящих сил, Я, рыцаря заслуживая шпоры, Тебе, царевна, мысленно служил!: 47
Федор
Брат Христиан, как странно и как ново Мне речь твоя звучит! Не думал я, Чтоб можно было полюбить кого, Не знаючи иль не видав. Но правда Мне слышится в твоих словах, и вместе В них будто что-то чуется родное; И хорошо с тобой мне, Христиан, Так хорошо, как будто после долгой Разлуки я на родину вернулся. И Ксенья вот задумалась, смотри!: 41
Ксения
Задумалась я вправду. Новый мир Ты, королевич, мне открыл. У нас Не любят так. У нас отцы детей Посватают, не спрашивая их, И без любви друг к другу под венец Они идут. Я, признаюсь, всегда Дивилася тому.: 41
Федор
Обычай этот К нам от татар привился, а до них Вольна была невеста жениха Сама избрать.: 30
Христиан
Гаральд норвежский наш Дочь Ярослава русского посватал. Но не был он в ту пору знаменит И получил отказ от Ярославны. Тогда, в печали, бросился он в сечи, В Сицилии рубился много лет И в Африке, и наконец вернулся В град Киев он, победами богат И несказанной славою, и Эльса Гаральда полюбила.: 46
Федор
Да, в то время Стекалось в Киев много женихов. Другая Ярославна за Индрика Французского пошла, а третья дочь — За короля венгерского Андрея. Всем трем отец дал волю выбирать. Тогда у нас свободней, Христиан, И лучше было. В те поры у немцов Был мрак еще, а в Киеве считалось Уж сорок школ. Татары все сгубили.: 30
Христиан
Отец твой то, царевич, воскресит, Вознаградит потерянное время!: 22
Ксения
Да, Христиан. Но, верь мне, ты не знаешь Еще отца! Доселе видел ты Его дела; но если б видеть мог ты Его любовь к земле, его заботу, Его печаль о том, чего свершить Он не успел, его негодованье На тех людей, которые б хотели Опять идти по-старому,— и вместе Терпенье к ним, и милость без конца — Тогда бы ты узнал его!: 24
Христиан
Хотя бы Его не знал я вовсе — и тогда Он за любовь великую твою Мне б дорог стал!: 41
Ксения
Не потому его Люблю я, Христиан, что он отец мне; Нет, я за то люблю его, что он Так мало мыслит о себе!: 41
Федор
То правда; Лишь об одной земле его забота: Татарщину у нас он вывесть хочет, В родное хочет нас вернуть русло. Подумаешь: и сами ведь породой Мы хвастаться не можем; от татар ведь Начало мы ведем!: 46
Христиан
Но двести лет Вы русские. Татарской крови мало Осталось в вас.: 48
Федор
Ни капли не осталось! И вряд ли бы нашелся на Руси, Кто б ненавидел более татар, Чем мы с отцом.: 34
Христиан
Они навряд ли также Царя Бориса любят с той поры, Как он разбил, при Федоре, их силу!: 22
Федор
Ведь вот теперь сидим мы здесь втроем И говорим свободно, а в народе Ведь думают, что Ксеньи и доселе Ты не видал, что ты ее увидишь Лишь под венцом! А вместе показаться И думать вам нельзя, того обычай, Вишь, не велит! Хотелось бы мне знать: Когда она не пряталась, пока Невестой не была, зачем теперь Ей прятаться!: 46
Ксения
Нельзя, сказал отец, Все разом переделать; глубоко Пустил у нас чужой обычай корни И медленно выводится.: 24
Федор
К прискорбью! И матушка вот следует ему. Ей нелюбо, что видеться дозволил Вам двум отец. Она бы под замком Тебя держать хотела!: 24
Ксения
Не вини Ты нашу мать за это, королевич. Не всякому дано так ясно видеть, Как батюшке.: 22
Федор
Не то одно. Что грех Уж нам таить! Еще за то косится На Христиана наша мать, что он Не нашей веры.: 34
Ксения
Но ведь нашу веру, Не правда ль, примешь ты?: 8
Христиан
Не торопи Меня, царевна. В этом Бог волен. Учителей я ваших обещал С благоговеньем выслушать, но только По убежденью откажусь от веры Моих отцов.: 22
Ксения
Тогда спокойна я. Не можешь, королевич, не принять Ты нашей веры. Без греха могу я Тебя любить.: 11
Федор
А я уж и подавно! Дадим же мы втроем обет друг другу Любить друг друга, помогать друг другу, Не мыслить врозь и вместе жить всегда! Ты, Ксения, согласна?: 41
Ксения
Всей душой!: 32
Федор
Ты, Христиан?: 38
Христиан
И сердцем и душою!: 13
Федор
Но в тайне пусть союз наш остается! Тем крепче будет он. Подумай только, Чего не сможем сделать мы втроем! Ты нас учи всему, чем превосходна Твоя земля, а мы со Ксеньей будем Тебя знакомить с Русью!: 11
Христиан
Дай мне Бог Ей вместе с вами послужить!: 28
Федор
Втроем Мы воскресим то время, о котором В старинных книгах ты читал, когда Так близки были наши деды. Боже! Продли отцу его надолго дни, Чтоб Русью стала снова Русь!: 22
Ксения
Господь Услышь тебя, Феодор!: 40
Стольник
Царь идет!: 22
Борис
Я перервал ваш, дети, разговор. Вы горячо о чем-то толковали. Что, Христиан? Успел ты на Руси Обжиться с нами?: 4
Федор
Да, отец! Он русский! И русский он обычай перенял: Он на пути к Москве, себе в забаву, Смирял неезженых коней!: 24
Борис
Нам Власьев И Салтыков так донесли. Ты любишь Искать везде опасность, Христиан, То укрощать коней, то по волнам Ладьею править в бурю?: 34
Христиан
Государь, Я датчанин. Нам, как и русским, любо, Когда не трубит бранная труба, Изведывать уменье или силу Над чем пришлось.: 44
Борис
Но Ксении моей Твоя отвага даровая может Не по сердцу прийтись.: 28
Христиан
Царевна Ксенья! Скажи сама, по правде: жениха Ты робкого могла ли б полюбить?: 41
Ксения
Нет, королевич.: 5
Борис
Если бы у нас Была война, тогда бы, Христиан, Ты удаль мог свою нам показать!: 34
Христиан
О, помяни ж ты это слово, царь! И если кто войну тебе объявит, Дай русскую вести мне рать! Клянусь, Я победить врагов твоих сумею Иль умереть, отец мой, за тебя!: 22
Федор
А мне, отец, дозволь идти с ним вместе! Обоим нам дай кровью послужить Родной земле!: 24
Борис
Любезен мне ваш пыл И ваша доблесть, юноши, но Русь Ограждена от войн теперь надолго. Не чаем мы вторжения врагов; Соседние наперерыв державы Нам предлагают дружбу и союз; Совместников на царство мы не знаем; Незыблем наш и тверд стоит престол — И мирными придется вам делами Довольным быть.: 11
Стольник
Великий государь,— Боярин Годунов, Семен Никитич!: 20
Борис
Пускай войдет!: 2
Федор
Пойдем, брат Христиан, Пойдем, сестра. У батюшки дела!: 29
Борис
Что сталося с тобой? Чем так, Никитич, Встревожен ты?: 20
Семен Годунов
Великий государь, Есть чем тревожиться! Возникнул слух: Царевич жив!: 22
Борис
Жив кто?: 16
Семен Годунов
Царевич Дмитрий!: 22
Борис
С ума ты, что ль, сошел?: 9
Семен Годунов
И сам бы рад Так думать, царь; но с разных к нам сторон Все та же весть приходит: жив Димитрий!: 22
Борис
Кто слышал эту весть?: 16
Семен Годунов
На площадях, В корчмах, везде, где только два иль три Сойдутся человека, тотчас шепчут Они о том промеж себя.: 34
Борис
И что ж По-ихнему? Как тот царевич Дмитрий Воскреснуть мог?: 22
Семен Годунов
Все та же басня, царь!: 22
Борис
Какая басня? Говори!: 16
Семен Годунов
Ты помнишь — Когда, падучим схваченный недугом, Упал на нож и закололся он — Ты помнишь…: 11
Борис
Ну?: 45
Семен Годунов
Нагие оболгали Тебя, что будто…: 48
Борис
Помню басню их. Ну, что ж? Когда б и вправду так случилось, Как мог воскреснуть он?: 23
Семен Годунов
Убийцы, мол, Ошиблися — зарезали другого.: 21
Борис
Кто смеет это говорить? Его Весь Углич мертвым видел! Ошибиться Не мог никто! Клешнин и Шуйский, оба Его в соборе видели! Нет, нет, То слух пустой; рассеется он скоро, Как ветром дым. Но злостным на меня Я вижу умысел. Опять в том деле Меня винят. Забытую ту ложь Из пыли кто-то выкопал, чтоб ею Ко мне любовь Русии подорвать!: 7
Семен Годунов
Романовы Черкасских угощали Вчерашний день. За ужином у них Шла речь о том же. Слуги донесли.: 46
Борис
Романовы? Которых я щадил? Они молву ту распускают? Нет — Нет, этого терпеть нельзя!: 34
Семен Годунов
Давно бы Так, государь!: 13
Борис
Не будем торопиться — Их чтит народ…: 17
Семен Годунов
Лишь развяжи мне руки!: 28
Борис
Преступником в глазах народа царь Не может быть. Чист и безгрешен должен Являться он, чтобы не только воля Вершилася его без препинанья, Но чтоб в сердцах послушных как святыня Она жила! С Романовыми я Повременю. Но если кто в народе Дерзнет о слухе том лишь заикнуться — В тюрьму его! Ступай разведай, как И кем тот слух посеян на Москве? До корня докопайся — и о всем Мне донеси! Нет, этого нельзя, Нельзя терпеть! Хоть я не царь Иван, Но и не Федор также. Против воли Пришлось быть строгим. Человек не властен Идти всегда избранным им путем. Не можем мы предвидеть, что с дороги Отклонит нас. Решился твердо я Одной любовью править; но когда Держать людей мне невозможно ею — Им гнев явить и кару я сумею!: 47
In [ ]:
list(sent_to_vector_dict)[:10]
In [237]:
drama_lens = [sum([len(scene) for scene in drama]) for drama in dramas_texts]
list(zip(range(210), dramas, drama_lens))
Out[237]:
[(0, 'gogol-lakeiskaja.pkl', 78),
 (1, 'prutkov-fantaziya.pkl', 340),
 (2, 'sumarokov-opekun.pkl', 282),
 (3, 'ostrovsky-bednaja-nevesta.pkl', 1163),
 (4, 'turgenev-mesjats-v-derevne.pkl', 1517),
 (5, 'nekrasov-zabrakovannye.pkl', 46),
 (6, 'blok-neznakomka.pkl', 191),
 (7, 'rostopchina-neludimka.pkl', 486),
 (8, 'sumarokov-pridanoe-obmanom.pkl', 310),
 (9, 'nekrasov-akter.pkl', 239),
 (10, 'knyazhnin-rosslav.pkl', 302),
 (11, 'gogol-zhenitba.pkl', 706),
 (12, 'kropotov-fomushka.pkl', 373),
 (13, 'ostrovsky-svoi-sobaki-gryzutsya-chuzhaya-ne-pristavaj.pkl', 457),
 (14, 'andreyev-mysl.pkl', 630),
 (15, 'turgenev-holostjak.pkl', 883),
 (16, 'ostrovsky-trudovoj-hleb.pkl', 808),
 (17, 'khmelnitsky-vzaimnye-ispytaniya.pkl', 330),
 (18, 'pushkin-stseny-iz-rytsarskih-vremen.pkl', 214),
 (19, 'majkov-agriopa.pkl', 306),
 (20, 'nikolev-samolyubivyj-stihotvorec.pkl', 772),
 (21, 'fonvizin-korion.pkl', 174),
 (22, 'zagoskin-blagorodnyj-teatr.pkl', 1340),
 (23, 'gogol-revizor.pkl', 926),
 (24, 'sumarokov-gamlet.pkl', 192),
 (25, 'prutkov-chereposlov-sirech-frenolog.pkl', 117),
 (26, 'khlebnikov-snezhimochka.pkl', 131),
 (27, 'bulgakov-poslednie-dni.pkl', 704),
 (28, 'gumilyov-don-zhuan-v-egipte.pkl', 76),
 (29, 'ostrovsky-semejnaya-kartina.pkl', 195),
 (30, 'blok-korol-na-ploschadi.pkl', 273),
 (31, 'andreyev-ne-ubiy.pkl', 852),
 (32, 'knyazhnin-vadim-novgorodskij.pkl', 156),
 (33, 'shakhovskoy-ne-lubo-ne-slushai.pkl', 467),
 (34, 'prutkov-spor-drevnih-grecheskih-filosofov.pkl', 32),
 (35, 'bulgakov-zojkina-kvartira.pkl', 1406),
 (36, 'glinka-velzen.pkl', 259),
 (37, 'pushkin-boris-godunov.pkl', 439),
 (38, 'prutkov-blondy.pkl', 92),
 (39, 'lermontov-strannyj-chelovek.pkl', 662),
 (40, 'sukhovo-kobylin-smert-tarelkina.pkl', 939),
 (41, 'knyazhnin-olga.pkl', 306),
 (42, 'gumilyov-ditja-allaha.pkl', 224),
 (43, 'pushkin-pir-vo-vremja-chumy.pkl', 28),
 (44, 'kokoshkin-vospitanie.pkl', 848),
 (45, 'ostrovsky-greh-da-beda-na-kogo-ne-zhivet.pkl', 830),
 (46, 'bulgakov-dni-turbinyh.pkl', 1247),
 (47, 'ostrovsky-ne-v-svoi-sani-ne-sadis.pkl', 645),
 (48, 'sumarokov-vzdorschitsa.pkl', 393),
 (49, 'chekhov-chaika.pkl', 629),
 (50, 'ostrovsky-puchina.pkl', 813),
 (51, 'lomonosov-tamira-i-selim.pkl', 208),
 (52, 'ostrovsky-pozdnyaya-lyubov.pkl', 848),
 (53, 'ostrovsky-bez-viny-vinovatye.pkl', 1097),
 (54, 'pisarev-naslednica.pkl', 308),
 (55, 'sukhovo-kobylin-svadba-krechinskogo.pkl', 1079),
 (56, 'shakhovskoy-pustodomy.pkl', 1268),
 (57, 'chekhov-jubilej.pkl', 133),
 (58, 'krylov-podschipa-ili-trumf.pkl', 290),
 (59, 'nekrasov-junost-lomonosova.pkl', 64),
 (60, 'pushkin-kamenniy-gost.pkl', 262),
 (61, 'leskov-rastochitel.pkl', 1020),
 (62, 'gorky-egor-bulychov-i-drugie.pkl', 1036),
 (63, 'turgenev-vecher-v-sorrente.pkl', 226),
 (64, 'gorky-vassa-zheleznova.pkl', 1065),
 (65, 'mamin-sibirjak-malenkaja-pravda.pkl', 839),
 (66, 'sumarokov-horev.pkl', 203),
 (67, 'prutkov-srodstvo-mirovyh-sil.pkl', 16),
 (68, 'ostrovsky-na-bojkom-meste.pkl', 670),
 (69, 'bulgakov-vojna-i-mir.pkl', 633),
 (70, 'gumilyov-gondla.pkl', 231),
 (71, 'chekhov-leshii.pkl', 880),
 (72, 'prutkov-oprometchivyj-turka.pkl', 34),
 (73, 'dashkova-toisiokov.pkl', 339),
 (74, 'ostrovsky-na-vsyakogo-mudreca-dovolno-prostoty.pkl', 1427),
 (75, 'ostrovsky-ne-tak-zhivi-kak-hochetsya.pkl', 502),
 (76, 'bulgakov-adam-i-eva.pkl', 872),
 (77, 'ostrovsky-dmitrij-samozvanets-i-vasilij-shujskij.pkl', 949),
 (78, 'ostrovsky-bednost-ne-porok.pkl', 593),
 (79, 'kedrin-rembrandt.pkl', 767),
 (80, 'lomonosov-demofont.pkl', 239),
 (81, 'krylov-sonnyj-poroshok.pkl', 443),
 (82, 'ekaterina-vtoraja-rasstroennaja-semja.pkl', 0),
 (83, 'ostrovsky-bespridannitsa.pkl', 1242),
 (84, 'sumarokov-dimitrij-samozvanets.pkl', 245),
 (85, 'naydyonov-deti-vanjushina.pkl', 1035),
 (86, 'turgenev-nahlebnik.pkl', 770),
 (87, 'chekhov-vishnevyi-sad.pkl', 634),
 (88, 'sollogub-chinovnik.pkl', 516),
 (89, 'tolstoy-zhivoy-trup.pkl', 850),
 (90, 'ostrovsky-les.pkl', 1421),
 (91, 'ostrovsky-beshenye-dengi.pkl', 1214),
 (92, 'lermontov-menschen-und-leidenschaften.pkl', 564),
 (93, 'sumarokov-semira.pkl', 295),
 (94, 'bulgakov-kabala-svjatosh.pkl', 681),
 (95, 'chekhov-medved.pkl', 153),
 (96, 'gorky-na-dne.pkl', 1188),
 (97, 'sumarokov-artistona.pkl', 267),
 (98, 'ostrovsky-goryachee-serdce.pkl', 1196),
 (99, 'turgenev-neostorozhnost.pkl', 406),
 (100, 'sumarokov-rogonosets-po-voobrazheniju.pkl', 378),
 (101, 'chekhov-tri-sestry.pkl', 758),
 (102, 'griboyedov-gore-ot-uma.pkl', 695),
 (103, 'knyazhnin-traur.pkl', 349),
 (104, 'gumilyov-akteon.pkl', 84),
 (105, 'pisemskij-gorkaja-sudbina.pkl', 572),
 (106, 'fonvizin-vybor-guvernera.pkl', 174),
 (107, 'krylov-pirog.pkl', 394),
 (108, 'turgenev-zavtrak-u-predvoditelja.pkl', 461),
 (109, 'kapnist-antigona.pkl', 157),
 (110, 'plavilshchikov-sgovor-kutejkina.pkl', 234),
 (111, 'bulgakov-batum.pkl', 898),
 (112, 'lensky-horosha-i-durna.pkl', 545),
 (113, 'mayakovsky-klop.pkl', 310),
 (114, 'sudovshchikov-neslyhannoe-divo.pkl', 599),
 (115, 'mayakovsky-banja.pkl', 414),
 (116, 'mayakovsky-misteriya-buff.pkl', 672),
 (117, 'knyazhnin-neudachnyj-primiritel.pkl', 630),
 (118, 'gogol-otryvok.pkl', 120),
 (119, 'khmelnitsky-govorun.pkl', 214),
 (120, 'ostrovsky-shutniki.pkl', 867),
 (121, 'sumarokov-chudovischi.pkl', 365),
 (122, 'sumarokov-tresotinius.pkl', 166),
 (123, 'ostrovsky-za-chem-pojdesh-to-i-najdesh.pkl', 674),
 (124, 'ostrovsky-dohodnoe-mesto.pkl', 885),
 (125, 'ostrovsky-poslednyaya-zhertva.pkl', 1501),
 (126, 'chekhov-tragik-ponevole.pkl', 30),
 (127, 'pushkin-mocart-i-saleri.pkl', 42),
 (128, 'ostrovsky-svoi-ljudi.pkl', 869),
 (129, 'ostrovsky-volki-i-ovtsy.pkl', 1678),
 (130, 'petrov-ostrov-mira.pkl', 635),
 (131, 'mamin-sibirjak-zolotopromyshlenniki.pkl', 828),
 (132, 'kapnist-yabeda.pkl', 1115),
 (133, 'majkov-femist-i-ieronima.pkl', 244),
 (134, 'fonvizin-brigadir.pkl', 717),
 (135, 'babel-zakat.pkl', 619),
 (136, 'chekhov-djadja-vanja.pkl', 537),
 (137, 'bulgakov-poloumnyj-zhurden.pkl', 703),
 (138, 'sukhovo-kobylin-delo.pkl', 1346),
 (139, 'saltykov-shchedrin-smert-pazuhina.pkl', 818),
 (140, 'chekhov-predlozhenie.pkl', 197),
 (141, 'turgenev-razgovor-na-bolshoj-doroge.pkl', 203),
 (142, 'krylov-prokazniki.pkl', 1105),
 (143, 'tolstoy-tsar-fedor-ioannovich.pkl', 997),
 (144, 'ostrovsky-v-chuzhom-piru-pohmelje.pkl', 403),
 (145, 'tolstoy-smert-ioanna-groznogo.pkl', 887),
 (146, 'shakhovskoy-svoya-semya.pkl', 728),
 (147, 'ostrovsky-groza.pkl', 972),
 (148, 'nekrasov-shila-v-meshke-ne-utaish.pkl', 351),
 (149, 'fonvizin-nedorosl.pkl', 910),
 (150, 'andreyev-k-zvezdam.pkl', 940),
 (151, 'pushkin-rusalka.pkl', 122),
 (152, 'ostrovsky-snegurochka.pkl', 575),
 (153, 'lazhechnikov-okopirovalsya.pkl', 509),
 (154, 'gogol-utro-delovogo-cheloveka.pkl', 84),
 (155, 'ostrovsky-utro-molodogo-cheloveka.pkl', 214),
 (156, 'gogol-teatralnyi-razezd.pkl', 279),
 (157, 'griboyedov-molodye-suprugi.pkl', 321),
 (158, 'pisarev-lukavin.pkl', 923),
 (159, 'ozerov-dmitrij-donskoj.pkl', 225),
 (160, 'gogol-igroki.pkl', 478),
 (161, 'krylov-filomela.pkl', 207),
 (162, 'ostrovsky-nevolnicy.pkl', 1022),
 (163, 'ostrovsky-staryj-drug-luchshe-novyh-dvuh.pkl', 691),
 (164, 'khmelnitsky-svetskiy-sluchay.pkl', 404),
 (165, 'khmelnitsky-vozdushnye-zamki.pkl', 266),
 (166, 'pushkin-skupoj-rytsar.pkl', 102),
 (167, 'kheraskov-venecianskaya-monahinya.pkl', 226),
 (168, 'blok-balaganchik.pkl', 77),
 (169, 'chekhov-ivanov.pkl', 634),
 (170, 'chekhov-na-bolshoi-doroge.pkl', 264),
 (171, 'bulgakov-ivan-vasilevich.pkl', 613),
 (172, 'ostrovsky-ne-ot-mira-sego.pkl', 618),
 (173, 'chekhov-svadba.pkl', 154),
 (174, 'tretyakov-protivogazy.pkl', 499),
 (175, 'turgenev-provintsialka.pkl', 555),
 (176, 'shakhovskoy-urok-koketkam.pkl', 1181),
 (177, 'ostrovsky-vospitannica.pkl', 565),
 (178, 'afinogenov-mashenka.pkl', 767),
 (179, 'ekaterina-vtoraja-o-vremja.pkl', 281),
 (180, 'knyazhnin-hvastun.pkl', 981),
 (181, 'ostrovsky-ne-soshlis-harakterami.pkl', 383),
 (182, 'pisarev-poezdka-v-kronshtadt.pkl', 571),
 (183, 'tolstoy-vlast-tmy.pkl', 1041),
 (184, 'ostrovsky-bogatye-nevesty.pkl', 805),
 (185, 'merezhkovsky-pavel-pervyj.pkl', 1259),
 (186, 'belsky-skazanie-o-nevidimom-grade-kitezhe.pkl', 301),
 (187, 'gogol-tjazhba.pkl', 69),
 (188, 'ekaterina-vtoraja-iz-zhizni-rjurika.pkl', 243),
 (189, 'ostrovsky-neozhidannyj-sluchaj.pkl', 403),
 (190, 'bulgakov-beg.pkl', 821),
 (191, 'kheraskov-plamena.pkl', 335),
 (192, 'krylov-amerikantsy.pkl', 425),
 (193, 'lermontov-maskarad.pkl', 754),
 (194, 'plavilshchikov-ermak-pokoritel-sibiri.pkl', 267),
 (195, 'turgenev-gde-tonko-tam-i-rvetsja.pkl', 481),
 (196, 'knyazhnin-didona.pkl', 220),
 (197, 'krylov-modnaja-lavka.pkl', 646),
 (198, 'krylov-urok-dochkam.pkl', 409),
 (199, 'knyazhnin-chudaki.pkl', 1022),
 (200, 'ostrovsky-tyazhelye-dni.pkl', 618),
 (201, 'tolstoy-tsar-boris.pkl', 1018),
 (202, 'chekhov-noch-pered-sudom.pkl', 74),
 (203, 'kheraskov-osvobozhdennaja-moskva.pkl', 362),
 (204, 'chekhov-tatjana-repina.pkl', 262),
 (205, 'babel-marija.pkl', 560),
 (206, 'sumarokov-ssora-u-muzha-s-zhenoj.pkl', 276),
 (207, 'ostrovsky-prazdnichnyj-son-do-obeda.pkl', 499),
 (208, 'sumarokov-pustaja-ssora.pkl', 174),
 (209, 'sumarokov-sinav-i-truvor.pkl', 240)]
In [249]:
# dramas_names = []
cluster_vecs = []
# for i, drama in tqdm(enumerate([dramas[11]])):
for part_num, part in enumerate(dramas_texts[113][:1]):
#         dramas_names.append(drama.split('.')[0] + '_{}_{}_{}'.format(i, part_num, len(part)))
    _, clusters = cluster_text(part, clust_model_kmeans, sent_to_vector_dict=sent_to_vector_dict)
    cluster_vecs.append(clusters)
In [250]:
clusters_transmission_graph = nx.DiGraph()
for cluster_vec in tqdm(cluster_vecs):
    if len(cluster_vec) >=2:
        for i in range(len(cluster_vec) - 1):
            left_clust = cluster_vec[i]
            right_clust = cluster_vec[i + 1]
            if clusters_transmission_graph.has_edge(left_clust, right_clust):
                clusters_transmission_graph[left_clust][right_clust]['weight'] += 1
            else:
                clusters_transmission_graph.add_edge(left_clust, right_clust, weight=1)
fig, ax = plt.subplots()
fig.set_size_inches(50, 50)
curr_clust_names = {k:v for k,v in cluster_names.items() if k in list(clusters_transmission_graph.nodes)}
pos = nx.kamada_kawai_layout(clusters_transmission_graph)
nx.draw(clusters_transmission_graph, pos)
nx.draw_networkx_edges(clusters_transmission_graph, pos)
nx.draw_networkx_labels(clusters_transmission_graph, pos, curr_clust_names, font_size=30)
print('done')
done
In [256]:
from math import exp
all_weights = []
for (node1, node2, data) in clusters_transmission_graph.edges(data=True):
    all_weights.append(data['weight']) #we'll use this when determining edge thickness
unique_weights = list(set(all_weights))
fig, ax = plt.subplots()
fig.set_size_inches(50, 50)
curr_clust_names = {k:v for k,v in cluster_names.items() if k in list(clusters_transmission_graph.nodes)}
pos = nx.kamada_kawai_layout(clusters_transmission_graph)
nx.draw_networkx_nodes(clusters_transmission_graph, pos)
nx.draw_networkx_labels(clusters_transmission_graph, pos, curr_clust_names, font_size=40)
for weight in unique_weights:
    weighted_edges = [(node1,node2) for (node1, node2, edge_attr) in
                      clusters_transmission_graph.edges(data=True) if edge_attr['weight']==weight]
    width = (weight * 50 / sum(all_weights))**3
    nx.draw_networkx_edges(clusters_transmission_graph, pos, edgelist=weighted_edges, width=width)
In [254]:
btw_centrality = nx.centrality.betweenness_centrality(clusters_transmission_graph, normalized=True, weight='weight')
{cluster_names[k]: v for k, v in sorted(btw_centrality.items(), key=lambda item: -item[1])}
Out[254]:
{'Свадьба/жених/невеста': 0.310515873015873,
 'Длинная фраза про общество/страну/общественное положение/работу/быт': 0.29484126984126985,
 'О деньгах': 0.2466269841269841,
 'Эмоциональное высказывание': 0.13055555555555556,
 'Короткая фраза с троеточием': 0.1400793650793651,
 'Вопрос': 0.10119047619047618,
 'О жене/муже/отношениях': 0.08829365079365079,
 'Эмоциональное восклицание': 0.08571428571428572,
 'Фраза с троеточием(эмоция)': 0.07896825396825397,
 'Обращение по имени отчеству': 0.07103174603174603,
 'О любви': 0.06805555555555556,
 'О женщине': 0.06349206349206349,
 'О действии': 0.03412698412698413,
 'Хозяйство/еда/время': 0.029761904761904764,
 'Мнение о человеке/людях/группе лиц': 0.025,
 'Быт/передвижения': 0.014484126984126986,
 'Мнение/действие': 0.014285714285714287,
 'Эмоциональное высказывние/вопрос': 0.00892857142857143,
 'Князь/царь/король/власть': 0.006944444444444445,
 'О себе': 0.0,
 'Молчание/разговор': 0.0}
In [157]:
cluster_names[8]
Out[157]:
'Вера/обещание/прощение'
In [ ]:
# cluster_names = {}
# for curr_cluster in set(clust_model_kmeans.predict(X)):
# for curr_cluster in range(50):
for curr_cluster in [39]:
    print(curr_cluster)
    sents_in_this_cluster = [sent for sent, cluster in sents_with_clusters if cluster==curr_cluster]
    for sent in random.choices(sents_in_this_cluster, k=20):
        print(sent)
#     cluster_names[curr_cluster] = input()
    print('=========================\n=========================\n=========================\n\n\n')
In [161]:
node2vec = Node2Vec(clusters_transmission_graph, dimensions=2, walk_length=5, num_walks=5, workers=10)
embs = node2vec.fit(window=1, min_count=2)
Computing transition probabilities: 100%|██████████| 50/50 [00:00<00:00, 123.13it/s]
WARNING:gensim.models.base_any2vec:consider setting layer size to a multiple of 4 for greater performance
WARNING:gensim.models.base_any2vec:under 10 jobs per worker: consider setting a smaller `batch_words' for smoother alpha decay
In [162]:
import seaborn as sns
clust_to_vec_list = [embs[str(clust)] for clust in range(50)]
fig, ax = plt.subplots()
fig.set_size_inches(15, 10)
sns.scatterplot(x=[x for x, y in clust_to_vec_list],
                y=[y for x, y in clust_to_vec_list])
plt.grid()
In [164]:
?cluster_text
In [166]:
def list_of_clusters_to_vec(clusters, clust_to_vec):
    if len(clusters) > 0:
        return np.mean([clust_to_vec[clust] for clust in clusters], axis=0)
    else:
        return np.array([0] * len(clust_to_vec['0']))
drama2vec = []
for i, drama in tqdm(enumerate(dramas)):
    for part_num, part in enumerate(dramas_texts[i]):
        _, clusters = cluster_text(part, clust_model_kmeans, sent_to_vector_dict=sent_to_vector_dict)
        drama2vec.append(list_of_clusters_to_vec([str(clust) for clust in clusters], embs))
""" """ """ """ """ """ """ """ """ """

In [ ]:
{dramas_name: i for i, dramas_name in enumerate(dramas_names) if 'gorky' in dramas_name}
In [ ]:
# 563
cos_dis = pairwise_distances(drama2vec, drama2vec, metric='euclidean')
dis_dict = {dramas_names[i]: dis for i, dis in enumerate(cos_dis[698])}
{k: v for k, v in sorted(dis_dict.items(), key=lambda item: item[1])}
In [ ]:
parsed_text, clusters1 = cluster_text(dramas_texts[37][18], clust_model_kmeans, sent_to_vector_dict=sent_to_vector_dict)
for person, rep in parsed_text:
    print(person)
    for phrase in rep:
        print(phrase + ': ' + colored(rep[phrase], 'red'))
    print('\n')
In [ ]:
parsed_text, clusters1 = cluster_text(dramas_texts[10][20], clust_model_kmeans, sent_to_vector_dict=sent_to_vector_dict)
for person, rep in parsed_text:
    print(person)
    for phrase in rep:
        print(phrase + ': ' + colored(rep[phrase], 'red'))
    print('\n')
In [ ]:
import seaborn as sns
fig, ax = plt.subplots()
fig.set_size_inches(30, 20)
# plt.xlim(0.6, 1.2)
# plt.ylim(-1.6, -0.8)
authors = [drama_name.split('-')[0] for drama_name in dramas_names]
authors_sizes = {author: 20 for author in authors}
authors_sizes['gogol'] = 200
sns.scatterplot(x=[x for x, y in drama2vec],
                y=[y for x, y in drama2vec],
                hue=authors,
                size=authors,
                sizes=authors_sizes)
plt.grid()
In [17]:
def ngrams_from_vec(vec, n=5):
    output = []
    if len(vec) <= n:
        return [[]]
    else:
        return [vec[i: i+n] for i in range(len(vec)-n)]
# ngrams_from_vec(cluster_vecs[0], n=5)
In [ ]:
103945
In [148]:
sum([v for k, v in ngram_counter.items()])
Out[148]:
103945
In [87]:
fig, ax = plt.subplots()
fig.set_size_inches(12, 10)
ax = sns.distplot([v for k, v in ngram_counter.items()], bins=136, kde=False)
ax.set_xlabel('Количество вхождений триграмма в корпус', fontsize=28)
ax.set_ylabel('Количество триграммов', fontsize=28)
Out[87]:
Text(0, 0.5, 'Количество триграммов')
In [146]:
all_ngrams = []
for clusters_vec in tqdm(cluster_vecs):
    all_ngrams.extend(ngrams_from_vec(clusters_vec, n=3))
# ngram_counter = Counter([','.join([str(x) for x in ngram]) for ngram in all_ngrams if 39 in ngram])
# ngram_counter = Counter([', '.join([cluster_names.get(x, str(x)) + ' ' + str(x) for x in ngram]) for ngram in all_ngrams if ngram != []])
ngram_counter = Counter([','.join([cluster_names.get(x, str(x)) for x in ngram]) for ngram in all_ngrams if ngram != []])
for ng, cnt in list(({k: v for k, v in sorted(ngram_counter.items(), key=lambda item: -item[1])}).items())[:10]:
    print('{}&{}&{}&{}\\\\\\hline'.format(ng.split(',')[0], ng.split(',')[1], ng.split(',')[2], cnt))
# {k: v for k, v in sorted(ngram_counter.items(), key=lambda item: -item[1])}
Чувство/религия/мифология&Чувство/религия/мифология&Чувство/религия/мифология&136\\\hline
Князь/царь/король/власть&Князь/царь/король/власть&Князь/царь/король/власть&113\\\hline
Короткий ответ&Вопрос-уточнение&Короткий ответ&80\\\hline
О деньгах&О деньгах&О деньгах&77\\\hline
Эмоциональное высказывание&Эмоциональное высказывание&Эмоциональное высказывание&69\\\hline
Мнение о человеке/людях/группе лиц&Мнение о человеке/людях/группе лиц&Мнение о человеке/людях/группе лиц&68\\\hline
Вопрос-уточнение&Короткий ответ&Вопрос-уточнение&67\\\hline
Длинное рассуждение (о высоких темах)&Чувство/религия/мифология&Чувство/религия/мифология&67\\\hline
Чувство/религия/мифология&Чувство/религия/мифология&Длинное рассуждение (о высоких темах)&66\\\hline
Чувство/религия/мифология&Длинное рассуждение (о высоких темах)&Чувство/религия/мифология&54\\\hline
In [21]:
# import tensorflow as tf
# tf.compat.v1.enable_eager_execution()
ngrams_sents = {}
for i, drama in tqdm(enumerate(dramas)):
    for part_num, part in enumerate(dramas_texts[i]):
#         try:
        text_with_clusters, clusters = cluster_text(part, clust_model_kmeans, sent_to_vector_dict=sent_to_vector_dict)
        cluster_ngrams_for_this_text = [','.join([str(x) for x in ngram])
                                        for ngram in ngrams_from_vec(clusters, n=3)]
        sent_ngrams_for_this_text = ngrams_from_vec([list(sent)[0] for _, sent in text_with_clusters], n=3)
        for ngram, sents_ngram in zip(cluster_ngrams_for_this_text, sent_ngrams_for_this_text):
            if ngrams_sents.get(ngram) is not None:
                ngrams_sents[ngram] = ngrams_sents[ngram] + [sents_ngram]
            else:
                ngrams_sents[ngram] = [sents_ngram]
#         except:
#             print(part_num)

In [45]:
for sents_set in ngrams_sents['14,38,14']:
    print('\n\n'.join(sents_set))
    print('============================\n'*3)
Они уж в столовой-с.
А маменька?
В столовой и онэ-с.
============================
============================
============================
Играет-с.
В преферанс?
В свои козыри-с.
============================
============================
============================
Сто сорок четвертая.
А строка?
Ну пятнадцатая.
============================
============================
============================
Сто тридцать девятая.
А строка?
Тоже пятнадцатая.
============================
============================
============================
Грозила.
Упрекала?
Упрекала.
============================
============================
============================
Нездорова.
Нездорова?
Нездорова.
============================
============================
============================
За деньгами.
Ты это сделала сознательно?
Совершенно сознательно.
============================
============================
============================
Флегонт Егорыч-с.
Фамилия?
Попугайчиков-с.
============================
============================
============================
Попугайчиков-с.
Звание?
Торгуем-с.
============================
============================
============================
Двадцать пять сажен.
Вышина?
Пять сажен.
============================
============================
============================
Ушел.
Далеко ли?
За реку.
============================
============================
============================
Одной женщине.
Секрет?
Секрет. Вам.
============================
============================
============================
Со Степкой-с.
На пристяжке караковая?
Караковая-с.
============================
============================
============================
Актриса, вот и все.
Да актриса-то обыкновенная?
Публике нравится.
============================
============================
============================
Пятьдесят.
Тысяч?
Пуговиц.
============================
============================
============================
Крепко.
Солидно?
Солидно.
============================
============================
============================
Купец.
Богатый?
Богатый.
============================
============================
============================
Богатый.
И тароватый?
И тароватый.
============================
============================
============================
Сейчас.
Сейчас?
Сейчас или никогда.
============================
============================
============================
Утром, недавно.
Не пьяный?
Кажется, навеселе.
============================
============================
============================
Беру-с.
Значит — солгали?
Солгал.
============================
============================
============================
Да очень просто.
Она вас дожидается?
Дожидается..
============================
============================
============================
В купеческом клубе.
И получил?
Получил.
============================
============================
============================
Малость.
А стекла толченого?
Кладу по пропорции.
============================
============================
============================
Рубит.
Для храма?
Для храма.
============================
============================
============================
Всегда-с.
Всю жизнь?
Всю жизнь-с.
============================
============================
============================
Денег нужно.
Много?
Много.
============================
============================
============================
Приготовил.
Фрак?
Фрак.
============================
============================
============================
Поднялось.
На много?
Пятьдесят две копейки.
============================
============================
============================
Сукно.
Много сукна?
Много.
============================
============================
============================
Грузины.
Имеют оружие?
Имеют оружие.
============================
============================
============================
В Петербурге.
А получили образование?
В консерватории.
============================
============================
============================
Стал свататься.
А после?
Обвенчался.
============================
============================
============================
И всякого чину.
И арапы?
И арапы.
============================
============================
============================
Помещик.
Играет?
Играет.
============================
============================
============================
Больше.
Как больше?
Муж.
============================
============================
============================
Он с нею.
И Пронский?
С ними же.
============================
============================
============================
В англинском.В англинском.
Давно ль?Давно ль?
Сейчас.Сейчас.
============================
============================
============================
Прекрасный.
Il n'est pas gênant?
О, нисколько.
============================
============================
============================
Был-с.
Много ли же он просит?
Триста тысяч.
============================
============================
============================
Он.
В крагах?
Он.
============================
============================
============================
Варвара.
Отчество?
Ивановна.
============================
============================
============================
In [92]:
reducer = umap.UMAP()
embedding = reducer.fit_transform(vectors)
embedding.shape
Out[92]:
(116392, 2)
In [96]:
len(sents_with_clusters)
Out[96]:
116392
In [137]:
fig, ax = plt.subplots()
fig.set_size_inches(15, 10)
plt.clf()
plt.xlim(4, 16)
plt.ylim(-2, 12.5)
draw_clusters = [11,47,22, 29,39]
cl_sizes = {cl: 20 for cl in cluster_names}
for cl in draw_clusters:
    cl_sizes[cl] = 200
sns.scatterplot(x=[x for x, y in tqdm(embedding)],
                y=[y for x, y in tqdm(embedding)],
                hue=[cluster_names.get(cl)  if cl in draw_clusters else 'other'
                     for _, cl in tqdm(sents_with_clusters)],
                palette=sns.color_palette(n_colors=6))
# sns.scatterplot(x=[x for x, y in tqdm(embedding)],
#                 y=[y for x, y in tqdm(embedding)],
#                 hue=[cluster_names.get(cl)  if cl in draw_clusters else 'other' 
#                      for _, cl in tqdm(sents_with_clusters)], 
#                 size=[cl for _, cl in tqdm(sents_with_clusters)],
#                 sizes=cl_sizes,
#                 legend=False)
plt.grid()



In [123]:
?sns.scatterplot
In [88]:
# language model
# cluster_vecs - порядки кластеров в диалогах
from tensorflow.keras import backend as K
from tensorflow.keras.models import Sequential
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.layers import Embedding, LSTM, Dense, TimeDistributed, Activation, Dropout
from tensorflow.keras.models import clone_model
clusters_num = 50
hidden_size = 10
model = Sequential()
model.add(LSTM(300, return_sequences=True, input_shape=(None, 512)))
model.add(Dropout(0.25))
model.add(TimeDistributed(Dense(128, activation='tanh')))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(32, activation='tanh'))
model.add(Dense(clusters_num, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['categorical_accuracy'])
model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
lstm (LSTM)                  (None, None, 300)         975600
_________________________________________________________________
dropout (Dropout)            (None, None, 300)         0
_________________________________________________________________
time_distributed (TimeDistri (None, None, 128)         38528
_________________________________________________________________
dense_1 (Dense)              (None, None, 64)          8256
_________________________________________________________________
dropout_1 (Dropout)          (None, None, 64)          0
_________________________________________________________________
dense_2 (Dense)              (None, None, 32)          2080
_________________________________________________________________
dense_3 (Dense)              (None, None, 50)          1650
=================================================================
Total params: 1,026,114
Trainable params: 1,026,114
Non-trainable params: 0
_________________________________________________________________
In [91]:
from keras.utils import plot_model
plot_model(model, to_file='model.png', show_shapes=True,show_layer_names=True)
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-91-208fe05e7570> in <module>
      1 from keras.utils import plot_model
----> 2 plot_model(model, to_file='model.png', show_shapes=True,show_layer_names=True)
/opt/anaconda3/lib/python3.7/site-packages/keras/utils/vis_utils.py in plot_model(model, to_file, show_shapes, show_layer_names, rankdir, expand_nested, dpi)
    238     """
    239     dot = model_to_dot(model, show_shapes, show_layer_names, rankdir,
--> 240                        expand_nested, dpi)
    241     _, extension = os.path.splitext(to_file)
    242     if not extension:
/opt/anaconda3/lib/python3.7/site-packages/keras/utils/vis_utils.py in model_to_dot(model, show_shapes, show_layer_names, rankdir, expand_nested, dpi, subgraph)
     77     from ..models import Sequential
     78
---> 79     _check_pydot()
     80     if subgraph:
     81         dot = pydot.Cluster(style='dashed', graph_name=model.name)
/opt/anaconda3/lib/python3.7/site-packages/keras/utils/vis_utils.py in _check_pydot()
     20     if pydot is None:
     21         raise ImportError(
---> 22             'Failed to import `pydot`. '
     23             'Please install `pydot`. '
     24             'For example with `pip install pydot`.')
ImportError: Failed to import `pydot`. Please install `pydot`. For example with `pip install pydot`.
In [90]:
!pip install pydot
Collecting pydot
  Downloading pydot-1.4.1-py2.py3-none-any.whl (19 kB)
Requirement already satisfied: pyparsing>=2.1.4 in /opt/anaconda3/lib/python3.7/site-packages (from pydot) (2.4.6)
Installing collected packages: pydot
Successfully installed pydot-1.4.1
In [ ]:
X_lstm = [[clust_model_kmeans.cluster_centers_[cl] for cl in vec[:-1]]
          for vec in cluster_vecs if len(vec) > 2]
# y_lstm = [to_categorical(vec[1:], num_classes=50) for vec in cluster_vecs if len(vec) > 2]
X_lstm_train, X_lstm_test, y_lstm_train, y_lstm_test = train_test_split(X_lstm, y_lstm,
                                                                        test_size=0.2, random_state=42)
print(len(X_lstm_train))
def same_size_generator(X, y, batch_size=20):
    while True:
        X, y = shuffle(X, y)
        X = np.array(X)
        y = np.array(y)
        sizes = np.array([len(x) for x in X])
        single_sizes = shuffle(list(set(sizes)))
        for size in single_sizes:
            X_batch = X[np.where(sizes == size)]
            X_batch = np.array([list(x) for x in X_batch])
            y_batch = y[np.where(sizes == size)]
            y_batch = np.array([list(y) for y in y_batch])
            for index in range(0, len(X_batch), batch_size):
                yield X_batch[index: index+batch_size], y_batch[index: index+batch_size]
model.fit_generator(same_size_generator(X_lstm_train, y_lstm_train, batch_size=100),
                    epochs=50,
                    steps_per_epoch=200,
                    validation_data=same_size_generator(X_lstm_test, y_lstm_test, batch_size=100),
                    validation_steps=40)
In [ ]:
cluster_seq_emb = clone_model(model)
In [ ]:
cluster_seq_emb.pop()
cluster_seq_emb.summary()
In [168]:
embs['1']
"""Entry point for launching an IPython kernel.
Out[168]:
array([-0.13432807,  0.01905454], dtype=float32)
In [259]:
ngrams_list = []
ngrams_vecs = []
for ngram in tqdm(ngrams_sents):
    if ngram != '':
        ngrams_list.append(ngram)
        ngrams_vecs.append([vec[-1] for vec in
                            cluster_seq_emb.predict([[[clust_model_kmeans.cluster_centers_[int(cl)] for cl
                                                      in ngram.split(',')]]])][-1])

In [260]:
reducer = umap.UMAP()
ngrams_embedding = reducer.fit_transform(ngrams_vecs)
ngrams_embedding.shape
Out[260]:
(53877, 2)
In [272]:
# ngram_kmeans = KMeans(n_clusters=50, random_state=42)
ngram_clusters = ngram_kmeans.predict(ngrams_vecs)
In [273]:
fig, ax = plt.subplots()
fig.set_size_inches(30, 20)
plt.clf()
# plt.xlim(4, 17)
# plt.ylim(0, 20)
sns.scatterplot(x=[x for x, y in tqdm(ngrams_embedding)],
                y=[y for x, y in tqdm(ngrams_embedding)],
                hue=[ngram_clusters_names.get(cl) for cl in ngram_clusters],
                legend=False)
plt.grid()


In [274]:
ngram_to_clusters = {ngram: cluster for ngram, cluster in zip(ngrams_list, ngram_clusters)}
In [275]:
ngram_clusters_names
Out[275]:
{19: 'Диалог о семье/любви/свадьбе',
 33: 'Диалог из вопросов и ответов (в основном вопрос-ответ-вопрос)',
 7: 'Один из персонажей говорит, а второй немного вмешивается в диалог',
 11: 'Обмен информации, запрос на информацию (о знании)',
 21: 'Разговор о матери/с матью',
 18: 'Разговор о том что можно/нельзя или возможно/невозможно',
 42: 'О свадьбе',
 16: 'Активное действие',
 13: 'Один/оба говорят о себе, своем положении/действиях',
 6: 'Длинные рассуждения о чувствах/религии/мифологии',
 14: 'Комбинации из коротких вопросов и ответов',
 30: 'Шутки/смех/обида',
 44: 'Комбинации из коротких вопросов и ответов',
 0: 'Про передвижение в пространстве (в основном короткие фразы)',
 8: 'Комбинации из коротких вопросов и ответов',
 4: 'Комбинация из коротких вопросов и ответов',
 27: 'Длинные диалоги про общество/страну/общественное положение/работу/быт',
 48: 'Описания',
 36: 'Быстрое действие (короткие и эмоциональные фразы)',
 25: 'Рассказ о себе/других людях',
 26: 'Диалог, где один из персонажей говорит о себе',
 28: 'Фразы с троеточиями',
 23: 'Действие, короткие эмоциональные фразы',
 43: 'Быт и деньги',
 22: 'Короткие фразы, высказывания о себе/других людях',
 12: 'О движении/местонахождени',
 45: 'Короткие вопросы/ответы на тему передвижений',
 46: 'Активное действие (призывы к действию)',
 2: 'Рассуждения на общественные темы',
 17: 'Длинные рассуждения на разные темы',
 15: 'Активное действие',
 35: 'О любви',
 20: 'Женщины/быт/дом',
 39: 'Высказывание различных мнений о людях',
 29: 'Кто-то говорит о себе',
 31: 'Вера/обещание/прощение',
 5: 'Диалоги из коротких вопросов и ответов',
 41: 'Диалог с короткими эмоциональными фразами',
 37: 'Короткие вопросы и ответы',
 40: 'Быстрый диалог с короткими ответами',
 47: 'Быстрый диалог с короткими эмоциональными фразами',
 38: 'Разговор о прошлом/будущем/нынешнем разговоре',
 24: 'Обмен длинными рассуждениями',
 32: 'Фразы с троеточиями, которые обрамляют/прерывают более длинные рассуждения',
 3: 'Длинные рассуждения на высокие темы',
 10: 'Разговор с обращениями друг к другу по имени/отчеству',
 34: 'О власти/служении',
 9: 'Диалог, который заканчивается короткой фразой. Зачастую бытовой',
 1: 'Комбинация коротких вопросов и ответов',
 49: 'Диалоги с территориальными вопросами (о движении/местонахождении)'}
In [294]:
huge_clusters_len = {i: 0 for i in range(50)}
for ngram, cl in list(zip(ngrams_list, ngram_clusters)):
    huge_clusters_len[cl] += len(ngrams_sents[ngram])
{ngram_clusters_names[k] + ' {}'.format(k): v for k, v in sorted(huge_clusters_len.items(), key=lambda item: -item[1])}
Out[294]:
{'Рассуждения на общественные темы 2': 6528,
 'Длинные рассуждения о чувствах/религии/мифологии 6': 4991,
 'Длинные рассуждения на разные темы 17': 4751,
 'Кто-то говорит о себе 29': 3691,
 'Комбинация из коротких вопросов и ответов 4': 3551,
 'Разговор с обращениями друг к другу по имени/отчеству 10': 3456,
 'Быт и деньги 43': 3075,
 'Длинные диалоги про общество/страну/общественное положение/работу/быт 27': 2970,
 'Активное действие 16': 2762,
 'Активное действие 15': 2673,
 'Фразы с троеточиями, которые обрамляют/прерывают более длинные рассуждения 32': 2630,
 'Комбинации из коротких вопросов и ответов 8': 2596,
 'Обмен длинными рассуждениями 24': 2567,
 'О власти/служении 34': 2563,
 'Комбинации из коротких вопросов и ответов 14': 2306,
 'Один из персонажей говорит, а второй немного вмешивается в диалог 7': 2284,
 'Диалог из вопросов и ответов (в основном вопрос-ответ-вопрос) 33': 2265,
 'Женщины/быт/дом 20': 2177,
 'Диалог с короткими эмоциональными фразами 41': 2082,
 'Действие, короткие эмоциональные фразы 23': 2079,
 'Диалог, где один из персонажей говорит о себе 26': 2065,
 'Длинные рассуждения на высокие темы 3': 2029,
 'Высказывание различных мнений о людях 39': 2013,
 'Комбинация коротких вопросов и ответов 1': 2010,
 'Рассказ о себе/других людях 25': 1945,
 'Один/оба говорят о себе, своем положении/действиях 13': 1907,
 'Разговор о матери/с матью 21': 1766,
 'Короткие вопросы и ответы 37': 1724,
 'Диалог о семье/любви/свадьбе 19': 1632,
 'Описания 48': 1580,
 'Быстрый диалог с короткими ответами 40': 1513,
 'Про передвижение в пространстве (в основном короткие фразы) 0': 1484,
 'Активное действие (призывы к действию) 46': 1395,
 'О любви 35': 1391,
 'Разговор о прошлом/будущем/нынешнем разговоре 38': 1390,
 'Фразы с троеточиями 28': 1380,
 'Разговор о том что можно/нельзя или возможно/невозможно 18': 1314,
 'Короткие фразы, высказывания о себе/других людях 22': 1294,
 'Быстрый диалог с короткими эмоциональными фразами 47': 1270,
 'Обмен информации, запрос на информацию (о знании) 11': 1250,
 'Быстрое действие (короткие и эмоциональные фразы) 36': 1218,
 'О свадьбе 42': 1111,
 'О движении/местонахождени 12': 1099,
 'Шутки/смех/обида 30': 1083,
 'Вера/обещание/прощение 31': 992,
 'Диалог, который заканчивается короткой фразой. Зачастую бытовой 9': 980,
 'Комбинации из коротких вопросов и ответов 44': 950,
 'Короткие вопросы/ответы на тему передвижений 45': 857,
 'Диалоги из коротких вопросов и ответов 5': 669,
 'Диалоги с территориальными вопросами (о движении/местонахождении) 49': 637}
In [ ]:
for cluster in cluster_names:
In [304]:
# ngram_clusters_names = {}
ngram_with_clusters = list(zip(ngrams_list, ngram_clusters))
for curr_cluster in [24]:
#     if curr_cluster not in ngram_clusters_names:
    print(ngram_clusters_names.get(curr_cluster, curr_cluster))
    ngram_in_this_cluster = [ngram for ngram, cluster in ngram_with_clusters if cluster==curr_cluster]
    counter = 0
    for ngram in sorted(ngram_in_this_cluster, key=lambda x: -len(ngrams_sents[x]))[:20]:
        ngram_to_cluster_names = '"\\,,\\ "'.join([cluster_names[int(cl)] for cl in ngram.split(',')])
        print('"{}" len:{}'.format(ngram_to_cluster_names, len(ngrams_sents[ngram])))
        if counter <= 4:
            for sents_set in ngrams_sents[ngram][:3]:
                print('\n'.join(sents_set))
                print('\n')
            print('\n\n')
        counter += 1
#         ngram_clusters_names[curr_cluster] = input()
    print('=========================\n=========================\n=========================\n\n\n')
Обмен длинными рассуждениями
"Длинная фраза про общество/страну/общественное положение/работу/быт"\,,\ "Молчание/разговор"\,,\ "Длинная фраза про общество/страну/общественное положение/работу/быт" len:22
С Керженцевым в шахматы я не стану, как ты этого не понимаешь? Прошлый раз он с трех
              ходов зарезал меня... что же мне интересного играть с таким... Чигориным! И я все-таки
              понимаю, что это только игра, а он серьезен, как идол, и когда я проигрываю, считает
              меня ослом. Нет, не надо Керженцева!
Ну, поговоришь, вы с ним друзья.
Говори с ним сама, ты с ним любишь говорить, а я не хочу. Во-первых, говорить буду
              только я, а он будет молчать. Мало ли люди молчат, но он молчит ужасно противно! И
              потом, он просто надоел мне со своими дохлыми обезьянами, своей божественной мыслью --
              и лакеем Васькой, на которого он кричит, как буржуй. Экспериментатор! У человека такой
              великолепный лоб, за который за один можно поставить памятник,-- а что он сделал?
              Ничего. Хоть бы орехи бил своим лбом -- все-таки работа. Фу-ты, устал бегать!
Да! кланяться приказали. Вот, сударыня, прихожу я к ним: Иван Петрович на диване лежит,
            а Василий Гаврилыч на постели... или, бишь, Василий Гаврилыч на Диване. Табаком
            накурили, сударыня, -- не продохнешь просто.
Да что говорили-то?
А говорили-то, сударыня ты моя, чтобы непременно, говорит, нынче в Останкино приезжали,
            этак в вечерню, говорит. Да ты, говорит, Дарья, скажи, чтобы беспременно приезжали, хоть
            и дождик будет, все бы приезжали.
Рукопожатия отменяются. Хи-хи. Шучу-с. Ревуар! Видал я взяточников на своем веку, но этот Аллилуя экстраординарное явление в нашей
              жизни. Ик! А, черт тебя возьми! Селедки я, что ли, переложил за обедом? Ик! Пардон. Херувим, телефон.
Слусаю. Да, да. Тебе Гусь зовет.
Товарищ Гусь? Здравия желаю, Борис Семенович. В добром ли здоровье? В делах, в делах
              все. Как же, обязательно, сегодня ждем. День, можно сказать, такой выдающийся.
              Часикам... Ик! Пардон!.. К десяти... Вспоминали вас, вспоминали вас, вспоминали. Когда
              же, говорит, я увижу этот ассирийский профиль. Хи-хи. Секрет, секрет. Сюрприз есть.
              Ждем, ждем. Честь имею кланяться. Ик!
"Высказывание о себе или других людях"\,,\ "Молчание/разговор"\,,\ "Высказывание о себе или других людях" len:15
Точно так-с, я с вами согласен. Я должен вам признаться, Игнатий Ильич, что я... я
            вообще с дамами, с женским полом вообще, мало, так сказать, имел сношений; я, Игнатий
            Ильич, признаюсь вам откровенно, просто не могу придумать, о чем можно с особой женского
            пола поговорить — и притом наедине... особенно с девицей.
Вы меня удивляете. Я так не знаю, о чем нельзя с особой женского пола говорить,
            особенно с девицей, и особенно наедине.
Ну, да вы... Помилуйте, где ж мне за вами? Вот по этому-то случаю я бы желал прибегнуть
            к вам, Игнатий Ильич. Говорят, в этих делах лиха́ беда начать, так нельзя ли того-с, мне
            для вступленья в разговор — словечко, что ли, сообщить какое-нибудь приятное, вроде,
            например, замечанья — а уж там я пойду. Уж там я как-нибудь сам.
Может быть... но кто меня до этого довел? Я сама не понимаю, откуда у меня берется
            смелость так говорить с вами... Может быть, я говорю так оттого, что я ни на что более
            не надеюсь, оттого что вам угодно было растоптать меня... И вам это удалось...
            совершенно. Но слушайте: я не намерена лукавить с вами, как вы со мной... знайте: я ему
               всё сказала.
Что вы могли ему сказать?
Что?  Да всё то, что мне удалось заметить. Вы надеялись из
            меня всё выведать, не выдавши самой себя. Вы ошиблись, Наталья Петровна. Вы слишком
            рассчитывали на свои силы...
Мой серый попугай, Поэтому весь в вас: он тоже вечно Давно известное лепечет мне; И вы и он - слов заученных много Вы знаете... да только у обоих Бессмыслица выходит... Я ж, признаться, Не слушаю его...
Так заключить Смиренно должен я из ваших слов, Что и меня вам слушать не угодно?
Положим, так!.. Но, впрочем, если вам Забавно,- продолжайте! Вы нисколько Меня не беспокоите. Болтайте, Болтайте вдоволь, досыта; позвольте Мне только вас не слушать,- а покуда Я стану вышивать себе и думать О чем-нибудь другом...
"Высказывание о себе или других людях"\,,\ "Вопрос(может эмоциональный)"\,,\ "Высказывание о себе или других людях" len:15
Ну есть ли в тебе капля ума? Ну не олух ли ты? Собрался совершенно, и вдруг: не
              нужно! Ну скажи, пожалуйста, не свинья ли ты, не подлец ли ты после этого?
Ну что ж ты бранишься? с какой стати? что я тебе сделал?
Дурак, дурак набитый, это тебе всякий скажет. Глуп, вот просто глуп, хоть и
              экспедитор. Ведь о чем стараюсь? О твоей пользе; ведь изо рта выманят кус. Лежит,
              проклятый холостяк! Ну скажи, пожалуйста, ну на что ты похож? Ну, ну, дрянь, колпак,
              сказал бы такое слово... да неприлично только. Баба! хуже бабы!
Да и на что тебе разбирать, мой ангел! Ты обо мне-то не заботься! Ты спроси у
                своего сердца, что оно говорит тебе!
А ваше что вам говорит?
Да ведь ты мне, Таня, не веришь; ты говоришь, что я притворяюсь, а сама теперь
                спрашиваешь. А ну как я тебя обману?
Ты за счастье считай, что я за тебя пошла-то; с тысячами-то я бы в десять раз лучше
              тебя нашла. За меня какой полковник-то сватался! Как я была влюблена-то! До самой
              страсти! Да не отдали, оттого что очень в карты играет.
Зачем же ты шла за меня?
Выдали, так и пошла. Известно, глупа была. Тятенька-то думал, что ты -- деловой, что
              ты -- себе на прожитие достанешь.
"Высказывание о себе или других людях"\,,\ "О себе (действие)"\,,\ "Высказывание о себе или других людях" len:14
А! ну в таком случае сядьте... Сядьте здесь.  Мы с
            вами еще не поговорили как следует, Алексей Николаич. Мы еще не познакомились.
               А я желаю с вами познакомиться.
Я-с... мне очень лестно.
Вы меня теперь боитесь, я это вижу... но погодите, вы меня узнаете, вы перестанете меня
            бояться. Скажите... Скажите, сколько вам лет?
Нам опять привелось встретиться с вами. Я очень рад. Но пусть обстоятельства нашей
            первой встречи останутся между нами.
Прошу о том же и вас.
Я только что сделал доклад в астрономическом обществе — о том, чему вы были невольным
            свидетелем. Поразительный факт: звезда первой величины...
Послушайте, вы, кажется, хотите Со мною объясненья? - Я согласен; Но прежде знать хочу и вправе знать, Кто вы?.. О мне самом, я вижу, вам Подробно все известно... Но, про вас, Иное дело!.. Кто себя скрывает Под именем чужим, тот подозренью Все поводы представил...
Я - граф Юрий!
А, если так,- прекрасно! Очень рад Противника достойного я видеть. Граф Юрий!.. Это имя объяснило Мне все, чего понять не мог я вдруг... Когда ж и где?..
"Молчание/разговор"\,,\ "Молчание/разговор"\,,\ "Высказывание о себе или других людях" len:13
Хоть десять раз, только поговорим немножко о моем положении.
Ну, поговорим. Что же ты мне будешь рассказывать?
Я тебе хотела много, много сказать. Вчерашнее наше свидание так было коротко, так
              много я думала о тебе вчера вечером, ночью, нынче поутру... а теперь я так
              взволнована: мне кажется, я уж рее позабыла.
А что говорить?
Что в голову придет, то и говори. Если и соврешь что, так не важность; на первый раз
              не взыщут.
Ах, боже мой! Боже мой! Совсем точно потерянный. Понимаю ведь я сам, что теперь нужно
              делать-то, и другого, пожалуй, научу; да как же мне быть с моим характером-то? Теперь
              бы поскорей да поумней, так и можно бы дело обделать; а у меня вон руки и ноги
              трясутся. Вот ты и толкуй тут что хочешь. Такая робость нападает, точно тебя казнить
              ведут.
Что они говорят?
Княгиня, вы что-то сказали?
Да! Меня удивляет ваше поведение. Наговорив мне кучу дерзостей, вы, противу всяких
            правил, позволили себе сесть за ужин одни, не дожидаясь меня!
"Высказывание о себе или других людях"\,,\ "Короткий ответ с отрицательной частицей"\,,\ "Высказывание о себе или других людях" len:12
"Длинная фраза про общество/страну/общественное положение/работу/быт"\,,\ "Короткий утвердительный ответ/ короткий вопрос"\,,\ "Длинная фраза про общество/страну/общественное положение/работу/быт" len:12
"Высказывание о себе или других людях"\,,\ "Молчание/разговор"\,,\ "Длинная фраза про общество/страну/общественное положение/работу/быт" len:11
"Высказывание о себе или других людях"\,,\ "Короткий вопрос"\,,\ "Высказывание о себе или других людях" len:11
"О себе"\,,\ "Высказывание о себе или других людях"\,,\ "Молчание/разговор" len:11
"О действии"\,,\ "Высказывание о себе или других людях"\,,\ "Молчание/разговор" len:11
"Высказывание о себе или других людях"\,,\ "Короткий ответ"\,,\ "Высказывание о себе или других людях" len:10
"Чувство/религия/мифология"\,,\ "Чувство/религия/мифология"\,,\ "Молчание/разговор" len:9
"Молчание/разговор"\,,\ "Мнение о человеке/людях/группе лиц"\,,\ "Высказывание о себе или других людях" len:9
"О себе"\,,\ "Молчание/разговор"\,,\ "Высказывание о себе или других людях" len:9
"О себе"\,,\ "Молчание/разговор"\,,\ "Длинная фраза про общество/страну/общественное положение/работу/быт" len:9
"Молчание/разговор"\,,\ "О себе"\,,\ "О действии" len:8
"Высказывание о себе или других людях"\,,\ "Действие/призыв к действию"\,,\ "Высказывание о себе или других людях" len:8
"Эмоциональное высказывание"\,,\ "О себе (действие)"\,,\ "Высказывание о себе или других людях" len:8
"Молчание/разговор"\,,\ "Высказывание о себе или других людях"\,,\ "О себе" len:8
=========================
=========================
=========================
In [ ]:
ngram_clusters_names
In [323]:
authors_drama_pics = {}
authors_drama_names = {}
for i, drama in tqdm(enumerate(dramas)):
    drama_pic = []
    for part_num, part in enumerate(dramas_texts[i]):
        try:
            text_with_clusters, clusters = cluster_text(part, clust_model_kmeans, sent_to_vector_dict=sent_to_vector_dict)
            cluster_ngrams_for_this_text = [','.join([str(x) for x in ngram])
                                            for ngram in ngrams_from_vec(clusters, n=3)]
            ngram_clusters = [ngram_to_clusters[ngram] for ngram in cluster_ngrams_for_this_text if ngram != '']
            if len(ngram_clusters) > 0:
                part_vec = list(np.sum([to_categorical(cl, 50) for cl in ngram_clusters], axis=0))
                drama_pic.append(list(normalize([part_vec])[0]))
        except:
            pass
    if len(drama_pic) > 2:
#         sns.heatmap(drama_pic)
#         plt.show()
#         plt.clf()
        drama_pic = resize(np.array(drama_pic), (5, 50))
        if authors_drama_pics.get('0total') is None:
            authors_drama_pics['0total'] = drama_pic
            authors_drama_names['0total'] = [drama]
        else:
            authors_drama_pics['0total'] = authors_drama_pics['0total'] + drama_pic
            authors_drama_names['0total'] = authors_drama_names['0total'] + [drama]
        year = getRoundedThresholdv1(years[i], 50)
        if authors_drama_pics.get(str(year)) is None:
            authors_drama_pics[str(year)] = drama_pic
            authors_drama_names[str(year)] = [drama]
        else:
            authors_drama_pics[str(year)] = authors_drama_pics[str(year)] + drama_pic
            authors_drama_names[str(year)] = authors_drama_names[str(year)] + [drama]
        if authors_drama_pics.get(drama.split('-')[0]) is None:
            authors_drama_pics[drama.split('-')[0]] = drama_pic
            authors_drama_names[drama.split('-')[0]] = [drama]
        else:
            authors_drama_pics[drama.split('-')[0]] = authors_drama_pics[drama.split('-')[0]] + drama_pic
            authors_drama_names[drama.split('-')[0]] = authors_drama_names[drama.split('-')[0]] + [drama]

In [324]:
authors_drama_pics_fc = {}
for i, drama in tqdm(enumerate(dramas)):
    drama_pic = []
    for part_num, part in enumerate(dramas_texts[i]):
        try:
            text_with_clusters, clusters = cluster_text(part, clust_model_kmeans, sent_to_vector_dict=sent_to_vector_dict)
            if len(clusters) > 0:
                part_vec = list(np.sum([to_categorical(cl, 50) for cl in clusters], axis=0))
                drama_pic.append(list(normalize([part_vec])[0]))
        except:
            pass
    if len(drama_pic) > 2:
#         sns.heatmap(drama_pic)
#         plt.show()
#         plt.clf()
        drama_pic = resize(np.array(drama_pic), (5, 50))
        if authors_drama_pics_fc.get('0total') is None:
            authors_drama_pics_fc['0total'] = drama_pic
            authors_drama_names['0total'] = [drama]
        else:
            authors_drama_pics_fc['0total'] = authors_drama_pics_fc['0total'] + drama_pic
            authors_drama_names['0total'] = authors_drama_names['0total'] + [drama]
        year = getRoundedThresholdv1(years[i], 50)
        if authors_drama_pics_fc.get(str(year)) is None:
            authors_drama_pics_fc[str(year)] = drama_pic
            authors_drama_names[str(year)] = [drama]
        else:
            authors_drama_pics_fc[str(year)] = authors_drama_pics_fc[str(year)] + drama_pic
            authors_drama_names[str(year)] = authors_drama_names[str(year)] + [drama]
        if authors_drama_pics_fc.get(drama.split('-')[0]) is None:
            authors_drama_pics_fc[drama.split('-')[0]] = drama_pic
            authors_drama_names[drama.split('-')[0]] = [drama]
        else:
            authors_drama_pics_fc[drama.split('-')[0]] = authors_drama_pics_fc[drama.split('-')[0]] + drama_pic
            authors_drama_names[drama.split('-')[0]] = authors_drama_names[drama.split('-')[0]] + [drama]

In [348]:
getRoundedThresholdv1(1719, 50)
Out[348]:
1700
In [325]:
for author in sorted(authors_drama_pics):
    print(author)
    print(authors_drama_names[author][:10])
    for theme in [ngram_clusters_names[np.argmax(line)] for line in authors_drama_pics[author]]:
        print(theme)
    sns.heatmap(authors_drama_pics[author])
    plt.show()
    plt.clf()
0total
['gogol-lakeiskaja.pkl', 'prutkov-fantaziya.pkl', 'sumarokov-opekun.pkl', 'ostrovsky-bednaja-nevesta.pkl', 'turgenev-mesjats-v-derevne.pkl', 'nekrasov-zabrakovannye.pkl', 'blok-neznakomka.pkl', 'rostopchina-neludimka.pkl', 'sumarokov-pridanoe-obmanom.pkl', 'nekrasov-akter.pkl']
Рассуждения на общественные темы
Рассуждения на общественные темы
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
1750
['sumarokov-opekun.pkl', 'sumarokov-pridanoe-obmanom.pkl', 'majkov-agriopa.pkl', 'fonvizin-korion.pkl', 'sumarokov-gamlet.pkl', 'knyazhnin-olga.pkl', 'sumarokov-vzdorschitsa.pkl', 'lomonosov-tamira-i-selim.pkl', 'sumarokov-horev.pkl', 'lomonosov-demofont.pkl']
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
1800
['knyazhnin-rosslav.pkl', 'kropotov-fomushka.pkl', 'nikolev-samolyubivyj-stihotvorec.pkl', 'knyazhnin-vadim-novgorodskij.pkl', 'shakhovskoy-ne-lubo-ne-slushai.pkl', 'glinka-velzen.pkl', 'pushkin-boris-godunov.pkl', 'kokoshkin-vospitanie.pkl', 'pisarev-naslednica.pkl', 'shakhovskoy-pustodomy.pkl']
Рассуждения на общественные темы
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
1850
['gogol-lakeiskaja.pkl', 'prutkov-fantaziya.pkl', 'ostrovsky-bednaja-nevesta.pkl', 'turgenev-mesjats-v-derevne.pkl', 'nekrasov-zabrakovannye.pkl', 'rostopchina-neludimka.pkl', 'nekrasov-akter.pkl', 'gogol-zhenitba.pkl', 'ostrovsky-svoi-sobaki-gryzutsya-chuzhaya-ne-pristavaj.pkl', 'turgenev-holostjak.pkl']
Рассуждения на общественные темы
Рассуждения на общественные темы
Длинные рассуждения на разные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
1900
['blok-neznakomka.pkl', 'andreyev-mysl.pkl', 'khlebnikov-snezhimochka.pkl', 'blok-korol-na-ploschadi.pkl', 'andreyev-ne-ubiy.pkl', 'bulgakov-zojkina-kvartira.pkl', 'gumilyov-ditja-allaha.pkl', 'chekhov-chaika.pkl', 'ostrovsky-bez-viny-vinovatye.pkl', 'gorky-vassa-zheleznova.pkl']
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
1950
['bulgakov-poslednie-dni.pkl', 'bulgakov-dni-turbinyh.pkl', 'gorky-egor-bulychov-i-drugie.pkl', 'bulgakov-vojna-i-mir.pkl', 'bulgakov-adam-i-eva.pkl', 'kedrin-rembrandt.pkl', 'bulgakov-kabala-svjatosh.pkl', 'bulgakov-batum.pkl', 'mayakovsky-klop.pkl', 'mayakovsky-banja.pkl']
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
afinogenov
['afinogenov-mashenka.pkl']
Разговор с обращениями друг к другу по имени/отчеству
Разговор с обращениями друг к другу по имени/отчеству
Длинные рассуждения на разные темы
Разговор о матери/с матью
Разговор о матери/с матью
andreyev
['andreyev-mysl.pkl', 'andreyev-ne-ubiy.pkl', 'andreyev-k-zvezdam.pkl']
Рассуждения на общественные темы
Разговор с обращениями друг к другу по имени/отчеству
Разговор с обращениями друг к другу по имени/отчеству
Разговор с обращениями друг к другу по имени/отчеству
Разговор о матери/с матью
babel
['babel-zakat.pkl', 'babel-marija.pkl']
Длинные рассуждения на разные темы
Разговор с обращениями друг к другу по имени/отчеству
Разговор с обращениями друг к другу по имени/отчеству
Обмен информации, запрос на информацию (о знании)
Активное действие
belsky
['belsky-skazanie-o-nevidimom-grade-kitezhe.pkl']
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
blok
['blok-neznakomka.pkl', 'blok-korol-na-ploschadi.pkl']
Комбинация из коротких вопросов и ответов
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
bulgakov
['bulgakov-poslednie-dni.pkl', 'bulgakov-zojkina-kvartira.pkl', 'bulgakov-dni-turbinyh.pkl', 'bulgakov-vojna-i-mir.pkl', 'bulgakov-adam-i-eva.pkl', 'bulgakov-kabala-svjatosh.pkl', 'bulgakov-batum.pkl', 'bulgakov-poloumnyj-zhurden.pkl', 'bulgakov-ivan-vasilevich.pkl', 'bulgakov-beg.pkl']
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
chekhov
['chekhov-chaika.pkl', 'chekhov-leshii.pkl', 'chekhov-vishnevyi-sad.pkl', 'chekhov-medved.pkl', 'chekhov-tri-sestry.pkl', 'chekhov-djadja-vanja.pkl', 'chekhov-predlozhenie.pkl', 'chekhov-ivanov.pkl', 'chekhov-na-bolshoi-doroge.pkl']
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
dashkova
['dashkova-toisiokov.pkl']
Рассуждения на общественные темы
Кто-то говорит о себе
Длинные диалоги про общество/страну/общественное положение/работу/быт
Вера/обещание/прощение
Рассуждения на общественные темы
ekaterina
['ekaterina-vtoraja-o-vremja.pkl', 'ekaterina-vtoraja-iz-zhizni-rjurika.pkl']
О власти/служении
О власти/служении
О власти/служении
О власти/служении
О власти/служении
fonvizin
['fonvizin-korion.pkl', 'fonvizin-vybor-guvernera.pkl', 'fonvizin-brigadir.pkl', 'fonvizin-nedorosl.pkl']
О власти/служении
Длинные рассуждения о чувствах/религии/мифологии
О власти/служении
Рассуждения на общественные темы
Длинные рассуждения о чувствах/религии/мифологии
glinka
['glinka-velzen.pkl']
Длинные рассуждения на высокие темы
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
gogol
['gogol-lakeiskaja.pkl', 'gogol-zhenitba.pkl', 'gogol-revizor.pkl', 'gogol-utro-delovogo-cheloveka.pkl', 'gogol-igroki.pkl', 'gogol-tjazhba.pkl']
Разговор с обращениями друг к другу по имени/отчеству
Длинные рассуждения на разные темы
Диалог, где один из персонажей говорит о себе
Длинные рассуждения на высокие темы
Рассуждения на общественные темы
gorky
['gorky-egor-bulychov-i-drugie.pkl', 'gorky-vassa-zheleznova.pkl', 'gorky-na-dne.pkl']
Фразы с троеточиями
Фразы с троеточиями
Фразы с троеточиями, которые обрамляют/прерывают более длинные рассуждения
Фразы с троеточиями, которые обрамляют/прерывают более длинные рассуждения
Фразы с троеточиями, которые обрамляют/прерывают более длинные рассуждения
griboyedov
['griboyedov-gore-ot-uma.pkl', 'griboyedov-molodye-suprugi.pkl']
Длинные диалоги про общество/страну/общественное положение/работу/быт
Длинные рассуждения о чувствах/религии/мифологии
Комбинации из коротких вопросов и ответов
Длинные рассуждения на разные темы
Длинные рассуждения о чувствах/религии/мифологии
gumilyov
['gumilyov-ditja-allaha.pkl', 'gumilyov-gondla.pkl']
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
kapnist
['kapnist-antigona.pkl', 'kapnist-yabeda.pkl']
Длинные рассуждения на высокие темы
Длинные рассуждения на высокие темы
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
kedrin
['kedrin-rembrandt.pkl']
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Длинные рассуждения о чувствах/религии/мифологии
kheraskov
['kheraskov-venecianskaya-monahinya.pkl', 'kheraskov-plamena.pkl', 'kheraskov-osvobozhdennaja-moskva.pkl']
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
khlebnikov
['khlebnikov-snezhimochka.pkl']
Действие, короткие эмоциональные фразы
Длинные рассуждения о чувствах/религии/мифологии
Про передвижение в пространстве (в основном короткие фразы)
Про передвижение в пространстве (в основном короткие фразы)
Комбинация из коротких вопросов и ответов
khmelnitsky
['khmelnitsky-vzaimnye-ispytaniya.pkl', 'khmelnitsky-govorun.pkl', 'khmelnitsky-svetskiy-sluchay.pkl', 'khmelnitsky-vozdushnye-zamki.pkl']
Длинные рассуждения на разные темы
Рассуждения на общественные темы
Диалог, где один из персонажей говорит о себе
Комбинация коротких вопросов и ответов
Активное действие
knyazhnin
['knyazhnin-rosslav.pkl', 'knyazhnin-vadim-novgorodskij.pkl', 'knyazhnin-olga.pkl', 'knyazhnin-traur.pkl', 'knyazhnin-neudachnyj-primiritel.pkl', 'knyazhnin-hvastun.pkl', 'knyazhnin-didona.pkl', 'knyazhnin-chudaki.pkl']
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
kokoshkin
['kokoshkin-vospitanie.pkl']
О власти/служении
Диалог о семье/любви/свадьбе
Диалог с короткими эмоциональными фразами
Диалог о семье/любви/свадьбе
О власти/служении
kropotov
['kropotov-fomushka.pkl']
Рассуждения на общественные темы
Кто-то говорит о себе
Рассуждения на общественные темы
Длинные рассуждения на разные темы
Длинные рассуждения о чувствах/религии/мифологии
krylov
['krylov-podschipa-ili-trumf.pkl', 'krylov-sonnyj-poroshok.pkl', 'krylov-pirog.pkl', 'krylov-prokazniki.pkl', 'krylov-filomela.pkl', 'krylov-amerikantsy.pkl', 'krylov-modnaja-lavka.pkl', 'krylov-urok-dochkam.pkl']
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
lazhechnikov
['lazhechnikov-okopirovalsya.pkl']
Длинные диалоги про общество/страну/общественное положение/работу/быт
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Диалог о семье/любви/свадьбе
Длинные рассуждения на высокие темы
lensky
['lensky-horosha-i-durna.pkl']
Диалог о семье/любви/свадьбе
Длинные диалоги про общество/страну/общественное положение/работу/быт
Комбинация коротких вопросов и ответов
Кто-то говорит о себе
Рассуждения на общественные темы
lermontov
['lermontov-strannyj-chelovek.pkl', 'lermontov-menschen-und-leidenschaften.pkl', 'lermontov-maskarad.pkl']
Рассуждения на общественные темы
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
leskov
['leskov-rastochitel.pkl']
Рассуждения на общественные темы
Рассуждения на общественные темы
Кто-то говорит о себе
Разговор с обращениями друг к другу по имени/отчеству
Быстрое действие (короткие и эмоциональные фразы)
lomonosov
['lomonosov-tamira-i-selim.pkl', 'lomonosov-demofont.pkl']
Длинные рассуждения на высокие темы
Длинные рассуждения на высокие темы
Длинные рассуждения на высокие темы
Длинные рассуждения на высокие темы
Длинные рассуждения на высокие темы
majkov
['majkov-agriopa.pkl', 'majkov-femist-i-ieronima.pkl']
Длинные рассуждения на высокие темы
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
mamin
['mamin-sibirjak-malenkaja-pravda.pkl', 'mamin-sibirjak-zolotopromyshlenniki.pkl']
Разговор с обращениями друг к другу по имени/отчеству
Разговор с обращениями друг к другу по имени/отчеству
Разговор с обращениями друг к другу по имени/отчеству
Разговор с обращениями друг к другу по имени/отчеству
Разговор с обращениями друг к другу по имени/отчеству
mayakovsky
['mayakovsky-klop.pkl', 'mayakovsky-banja.pkl', 'mayakovsky-misteriya-buff.pkl']
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
merezhkovsky
['merezhkovsky-pavel-pervyj.pkl']
Рассуждения на общественные темы
О власти/служении
Фразы с троеточиями, которые обрамляют/прерывают более длинные рассуждения
О власти/служении
Быстрое действие (короткие и эмоциональные фразы)
naydyonov
['naydyonov-deti-vanjushina.pkl']
Длинные рассуждения на разные темы
Длинные рассуждения на разные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
nekrasov
['nekrasov-zabrakovannye.pkl', 'nekrasov-akter.pkl', 'nekrasov-shila-v-meshke-ne-utaish.pkl']
Рассуждения на общественные темы
Длинные рассуждения на высокие темы
Активное действие
Один из персонажей говорит, а второй немного вмешивается в диалог
Рассуждения на общественные темы
nikolev
['nikolev-samolyubivyj-stihotvorec.pkl']
Длинные рассуждения на разные темы
Фразы с троеточиями, которые обрамляют/прерывают более длинные рассуждения
Длинные рассуждения о чувствах/религии/мифологии
Рассуждения на общественные темы
Активное действие (призывы к действию)
ostrovsky
['ostrovsky-bednaja-nevesta.pkl', 'ostrovsky-svoi-sobaki-gryzutsya-chuzhaya-ne-pristavaj.pkl', 'ostrovsky-trudovoj-hleb.pkl', 'ostrovsky-greh-da-beda-na-kogo-ne-zhivet.pkl', 'ostrovsky-ne-v-svoi-sani-ne-sadis.pkl', 'ostrovsky-puchina.pkl', 'ostrovsky-pozdnyaya-lyubov.pkl', 'ostrovsky-bez-viny-vinovatye.pkl', 'ostrovsky-na-bojkom-meste.pkl', 'ostrovsky-na-vsyakogo-mudreca-dovolno-prostoty.pkl']
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
ozerov
['ozerov-dmitrij-donskoj.pkl']
Длинные рассуждения на высокие темы
Длинные рассуждения на высокие темы
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения на высокие темы
Длинные рассуждения на высокие темы
petrov
['petrov-ostrov-mira.pkl']
Комбинация из коротких вопросов и ответов
Комбинация из коротких вопросов и ответов
Комбинация из коротких вопросов и ответов
Комбинация из коротких вопросов и ответов
Кто-то говорит о себе
pisarev
['pisarev-naslednica.pkl', 'pisarev-lukavin.pkl', 'pisarev-poezdka-v-kronshtadt.pkl']
Длинные рассуждения на разные темы
Длинные рассуждения на разные темы
Длинные рассуждения на разные темы
Длинные рассуждения на разные темы
Длинные рассуждения на разные темы
pisemskij
['pisemskij-gorkaja-sudbina.pkl']
Рассуждения на общественные темы
Рассказ о себе/других людях
Длинные диалоги про общество/страну/общественное положение/работу/быт
Длинные диалоги про общество/страну/общественное положение/работу/быт
Рассуждения на общественные темы
plavilshchikov
['plavilshchikov-sgovor-kutejkina.pkl', 'plavilshchikov-ermak-pokoritel-sibiri.pkl']
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Диалог о семье/любви/свадьбе
Диалог о семье/любви/свадьбе
Обмен длинными рассуждениями
prutkov
['prutkov-fantaziya.pkl', 'prutkov-chereposlov-sirech-frenolog.pkl', 'prutkov-blondy.pkl', 'prutkov-srodstvo-mirovyh-sil.pkl']
Действие, короткие эмоциональные фразы
Рассуждения на общественные темы
Быстрое действие (короткие и эмоциональные фразы)
Комбинация из коротких вопросов и ответов
Быстрое действие (короткие и эмоциональные фразы)
pushkin
['pushkin-boris-godunov.pkl', 'pushkin-kamenniy-gost.pkl', 'pushkin-rusalka.pkl', 'pushkin-skupoj-rytsar.pkl']
Длинные рассуждения на высокие темы
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения на разные темы
Длинные рассуждения на высокие темы
Рассуждения на общественные темы
rostopchina
['rostopchina-neludimka.pkl']
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения на разные темы
Длинные рассуждения на разные темы
Диалог, где один из персонажей говорит о себе
saltykov
['saltykov-shchedrin-smert-pazuhina.pkl']
Рассуждения на общественные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Активное действие
Разговор с обращениями друг к другу по имени/отчеству
shakhovskoy
['shakhovskoy-ne-lubo-ne-slushai.pkl', 'shakhovskoy-pustodomy.pkl', 'shakhovskoy-svoya-semya.pkl', 'shakhovskoy-urok-koketkam.pkl']
Рассуждения на общественные темы
Длинные диалоги про общество/страну/общественное положение/работу/быт
Комбинация коротких вопросов и ответов
Длинные рассуждения на разные темы
Диалог, где один из персонажей говорит о себе
sollogub
['sollogub-chinovnik.pkl']
Комбинации из коротких вопросов и ответов
Комбинация коротких вопросов и ответов
Длинные рассуждения на разные темы
Разговор о том что можно/нельзя или возможно/невозможно
Рассуждения на общественные темы
sudovshchikov
['sudovshchikov-neslyhannoe-divo.pkl']
Комбинация из коротких вопросов и ответов
Длинные рассуждения о чувствах/религии/мифологии
Рассказ о себе/других людях
Рассуждения на общественные темы
Активное действие
sukhovo
['sukhovo-kobylin-smert-tarelkina.pkl', 'sukhovo-kobylin-svadba-krechinskogo.pkl', 'sukhovo-kobylin-delo.pkl']
Длинные рассуждения на разные темы
Рассуждения на общественные темы
Рассуждения на общественные темы
Длинные рассуждения на разные темы
Разговор с обращениями друг к другу по имени/отчеству
sumarokov
['sumarokov-opekun.pkl', 'sumarokov-pridanoe-obmanom.pkl', 'sumarokov-gamlet.pkl', 'sumarokov-vzdorschitsa.pkl', 'sumarokov-horev.pkl', 'sumarokov-dimitrij-samozvanets.pkl', 'sumarokov-semira.pkl', 'sumarokov-artistona.pkl', 'sumarokov-rogonosets-po-voobrazheniju.pkl', 'sumarokov-chudovischi.pkl']
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
Длинные рассуждения о чувствах/религии/мифологии
tolstoy
['tolstoy-zhivoy-trup.pkl', 'tolstoy-tsar-fedor-ioannovich.pkl', 'tolstoy-smert-ioanna-groznogo.pkl', 'tolstoy-vlast-tmy.pkl', 'tolstoy-tsar-boris.pkl']
О власти/служении
О власти/служении
О власти/служении
О власти/служении
О власти/служении
tretyakov
['tretyakov-protivogazy.pkl']
Комбинация из коротких вопросов и ответов
Комбинация из коротких вопросов и ответов
Короткие вопросы и ответы
Короткие вопросы и ответы
Короткие вопросы и ответы
turgenev
['turgenev-mesjats-v-derevne.pkl', 'turgenev-holostjak.pkl', 'turgenev-neostorozhnost.pkl', 'turgenev-zavtrak-u-predvoditelja.pkl', 'turgenev-provintsialka.pkl']
Фразы с троеточиями, которые обрамляют/прерывают более длинные рассуждения
Разговор с обращениями друг к другу по имени/отчеству
Разговор с обращениями друг к другу по имени/отчеству
Разговор с обращениями друг к другу по имени/отчеству
Разговор с обращениями друг к другу по имени/отчеству
zagoskin
['zagoskin-blagorodnyj-teatr.pkl']
Рассуждения на общественные темы
Комбинация из коротких вопросов и ответов
Длинные рассуждения на разные темы
Длинные рассуждения на разные темы
Активное действие (призывы к действию)
<Figure size 432x288 with 0 Axes>
In [406]:
cluster_names[45] = 'Короткий утвердительный ответ/вопрос'
In [363]:
len(sorted(set([author.split('-')[0] for author in authors_drama_names['1950']])))
Out[363]:
7
In [399]:
np.max(drama_pic)
Out[399]:
0.675822601060082
In [414]:
sns.set(font_scale=1.5)
for author in sorted(authors_drama_pics_fc):
    print(author)
    print(authors_drama_names[author][:10])
    for theme in [cluster_names[np.argmax(line)] for line in authors_drama_pics_fc[author]]:
        print(theme)
    fig, axes = plt.subplots(1, 2)
    fig.set_size_inches(5, 8)
    cl_names_list = [v for _, v in sorted(cluster_names.items(), key=lambda item: item[0])]
    max_value = np.max(normalize(authors_drama_pics_fc[author]))
    hm = sns.heatmap(np.transpose(normalize(authors_drama_pics_fc[author]))[:25],
                yticklabels=cl_names_list[:25],
                xticklabels=['Начало', '', 'Середина', '' , 'Конец'], ax=axes[0],
                vmin=.0, vmax=max_value, cbar_kws = dict(use_gridspec=False,location="top"))
    hm.set_xticklabels(hm.get_xticklabels(), rotation=270, horizontalalignment='left')
    hm.set_yticklabels(hm.get_yticklabels(), rotation=0, horizontalalignment='right')
    hm = sns.heatmap(np.transpose(normalize(authors_drama_pics_fc[author]))[25:],
                yticklabels=cl_names_list[25:],
                xticklabels=['Начало', '', 'Середина', '' , 'Конец'], ax=axes[1],
                vmin=.0, vmax=max_value, cbar_kws = dict(use_gridspec=False,location="top"))
    hm.set_xticklabels(hm.get_xticklabels(), rotation=270, horizontalalignment='center')
    hm.set_yticklabels(hm.get_yticklabels(), rotation=0, horizontalalignment='left')
    hm.yaxis.tick_right()
    plt.show()
    plt.clf()
0total
['gogol-lakeiskaja.pkl', 'prutkov-fantaziya.pkl', 'sumarokov-opekun.pkl', 'ostrovsky-bednaja-nevesta.pkl', 'turgenev-mesjats-v-derevne.pkl', 'nekrasov-zabrakovannye.pkl', 'blok-neznakomka.pkl', 'rostopchina-neludimka.pkl', 'sumarokov-pridanoe-obmanom.pkl', 'nekrasov-akter.pkl']
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
1750
['sumarokov-opekun.pkl', 'sumarokov-pridanoe-obmanom.pkl', 'majkov-agriopa.pkl', 'fonvizin-korion.pkl', 'sumarokov-gamlet.pkl', 'knyazhnin-olga.pkl', 'sumarokov-vzdorschitsa.pkl', 'lomonosov-tamira-i-selim.pkl', 'sumarokov-horev.pkl', 'lomonosov-demofont.pkl']
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
1800
['knyazhnin-rosslav.pkl', 'kropotov-fomushka.pkl', 'nikolev-samolyubivyj-stihotvorec.pkl', 'knyazhnin-vadim-novgorodskij.pkl', 'shakhovskoy-ne-lubo-ne-slushai.pkl', 'glinka-velzen.pkl', 'pushkin-boris-godunov.pkl', 'kokoshkin-vospitanie.pkl', 'pisarev-naslednica.pkl', 'shakhovskoy-pustodomy.pkl']
Длинное рассуждение (о высоких темах)
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
1850
['gogol-lakeiskaja.pkl', 'prutkov-fantaziya.pkl', 'ostrovsky-bednaja-nevesta.pkl', 'turgenev-mesjats-v-derevne.pkl', 'nekrasov-zabrakovannye.pkl', 'rostopchina-neludimka.pkl', 'nekrasov-akter.pkl', 'gogol-zhenitba.pkl', 'ostrovsky-svoi-sobaki-gryzutsya-chuzhaya-ne-pristavaj.pkl', 'turgenev-holostjak.pkl']
Общественно-бытовая тема
Общественно-бытовая тема
Высказывание о себе или других людях
Общественно-бытовая тема
Высказывание о себе или других людях
<Figure size 432x288 with 0 Axes>
1900
['blok-neznakomka.pkl', 'andreyev-mysl.pkl', 'khlebnikov-snezhimochka.pkl', 'blok-korol-na-ploschadi.pkl', 'andreyev-ne-ubiy.pkl', 'bulgakov-zojkina-kvartira.pkl', 'gumilyov-ditja-allaha.pkl', 'chekhov-chaika.pkl', 'ostrovsky-bez-viny-vinovatye.pkl', 'gorky-vassa-zheleznova.pkl']
Мнение о человеке/людях/группе лиц
Общественно-бытовая тема
О себе
Высказывание о себе или других людях
Мнение о человеке/людях/группе лиц
<Figure size 432x288 with 0 Axes>
1950
['bulgakov-poslednie-dni.pkl', 'bulgakov-dni-turbinyh.pkl', 'gorky-egor-bulychov-i-drugie.pkl', 'bulgakov-vojna-i-mir.pkl', 'bulgakov-adam-i-eva.pkl', 'kedrin-rembrandt.pkl', 'bulgakov-kabala-svjatosh.pkl', 'bulgakov-batum.pkl', 'mayakovsky-klop.pkl', 'mayakovsky-banja.pkl']
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
<Figure size 432x288 with 0 Axes>
afinogenov
['afinogenov-mashenka.pkl']
Обращение по имени отчеству
Обращение по имени отчеству
Общественно-бытовая тема
Обращение по имени отчеству
Обращение по имени отчеству
<Figure size 432x288 with 0 Axes>
andreyev
['andreyev-mysl.pkl', 'andreyev-ne-ubiy.pkl', 'andreyev-k-zvezdam.pkl']
Общественно-бытовая тема
Обращение по имени отчеству
Обращение по имени отчеству
Обращение по имени отчеству
Высказывание о себе или других людях
<Figure size 432x288 with 0 Axes>
babel
['babel-zakat.pkl', 'babel-marija.pkl']
Общественно-бытовая тема
Мнение о человеке/людях/группе лиц
Обращение по имени отчеству
Вопрос-уточнение
Вопрос
<Figure size 432x288 with 0 Axes>
belsky
['belsky-skazanie-o-nevidimom-grade-kitezhe.pkl']
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
blok
['blok-neznakomka.pkl', 'blok-korol-na-ploschadi.pkl']
Мнение о человеке/людях/группе лиц
Мнение о человеке/людях/группе лиц
О действии
Чувство/религия/мифология
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
bulgakov
['bulgakov-poslednie-dni.pkl', 'bulgakov-zojkina-kvartira.pkl', 'bulgakov-dni-turbinyh.pkl', 'bulgakov-vojna-i-mir.pkl', 'bulgakov-adam-i-eva.pkl', 'bulgakov-kabala-svjatosh.pkl', 'bulgakov-batum.pkl', 'bulgakov-poloumnyj-zhurden.pkl', 'bulgakov-ivan-vasilevich.pkl', 'bulgakov-beg.pkl']
Общественно-бытовая тема
Вопрос
Эмоциональное высказывание
Общественно-бытовая тема
Общественно-бытовая тема
<Figure size 432x288 with 0 Axes>
chekhov
['chekhov-chaika.pkl', 'chekhov-leshii.pkl', 'chekhov-vishnevyi-sad.pkl', 'chekhov-medved.pkl', 'chekhov-tri-sestry.pkl', 'chekhov-djadja-vanja.pkl', 'chekhov-predlozhenie.pkl', 'chekhov-ivanov.pkl', 'chekhov-na-bolshoi-doroge.pkl']
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
Высказывание о себе или других людях
О передвижении
<Figure size 432x288 with 0 Axes>
dashkova
['dashkova-toisiokov.pkl']
Общественно-бытовая тема
Общественно-бытовая тема
Чувство/религия/мифология
Высказывание о себе или других людях
Высказывание о себе или других людях
<Figure size 432x288 with 0 Axes>
ekaterina
['ekaterina-vtoraja-o-vremja.pkl', 'ekaterina-vtoraja-iz-zhizni-rjurika.pkl']
Князь/царь/король/власть
Князь/царь/король/власть
Князь/царь/король/власть
Общественно-бытовая тема
Князь/царь/король/власть
<Figure size 432x288 with 0 Axes>
fonvizin
['fonvizin-korion.pkl', 'fonvizin-vybor-guvernera.pkl', 'fonvizin-brigadir.pkl', 'fonvizin-nedorosl.pkl']
Семейный отношения(Бог как отец)
Общественно-бытовая тема
Высказывание о себе или других людях
О себе
Вопрос
<Figure size 432x288 with 0 Axes>
glinka
['glinka-velzen.pkl']
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
gogol
['gogol-lakeiskaja.pkl', 'gogol-zhenitba.pkl', 'gogol-revizor.pkl', 'gogol-utro-delovogo-cheloveka.pkl', 'gogol-igroki.pkl', 'gogol-tjazhba.pkl']
Общественно-бытовая тема
Мнение о человеке/людях/группе лиц
Вопрос
Общественно-бытовая тема
Общественно-бытовая тема
<Figure size 432x288 with 0 Axes>
gorky
['gorky-egor-bulychov-i-drugie.pkl', 'gorky-vassa-zheleznova.pkl', 'gorky-na-dne.pkl']
Короткая фраза с троеточием
Фраза с троеточием(эмоция)
Фраза с троеточием(эмоция)
Фраза с троеточием(эмоция)
Фраза с троеточием(эмоция)
<Figure size 432x288 with 0 Axes>
griboyedov
['griboyedov-gore-ot-uma.pkl', 'griboyedov-molodye-suprugi.pkl']
О жене/муже/отношениях
Чувство/религия/мифология
Высказывание о себе или других людях
Мнение/действие
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
gumilyov
['gumilyov-ditja-allaha.pkl', 'gumilyov-gondla.pkl']
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
kapnist
['kapnist-antigona.pkl', 'kapnist-yabeda.pkl']
Чувство/религия/мифология
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
kedrin
['kedrin-rembrandt.pkl']
Общественно-бытовая тема
Общественно-бытовая тема
Эмоциональное высказывание
Общественно-бытовая тема
Общественно-бытовая тема
<Figure size 432x288 with 0 Axes>
kheraskov
['kheraskov-venecianskaya-monahinya.pkl', 'kheraskov-plamena.pkl', 'kheraskov-osvobozhdennaja-moskva.pkl']
Чувство/религия/мифология
Длинное рассуждение (о высоких темах)
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
khlebnikov
['khlebnikov-snezhimochka.pkl']
Эмоциональное восклицание
Эмоциональное восклицание
Короткое восклицание/ ответ (слово вот)
Короткий ответ с отрицательной частицей
Общественно-бытовая тема
<Figure size 432x288 with 0 Axes>
khmelnitsky
['khmelnitsky-vzaimnye-ispytaniya.pkl', 'khmelnitsky-govorun.pkl', 'khmelnitsky-svetskiy-sluchay.pkl', 'khmelnitsky-vozdushnye-zamki.pkl']
Высказывание о себе или других людях
Высказывание о себе или других людях
Чувство/религия/мифология
Фраза с троеточием(эмоция)
Эмоциональное высказывание
<Figure size 432x288 with 0 Axes>
knyazhnin
['knyazhnin-rosslav.pkl', 'knyazhnin-vadim-novgorodskij.pkl', 'knyazhnin-olga.pkl', 'knyazhnin-traur.pkl', 'knyazhnin-neudachnyj-primiritel.pkl', 'knyazhnin-hvastun.pkl', 'knyazhnin-didona.pkl', 'knyazhnin-chudaki.pkl']
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Длинное рассуждение (о высоких темах)
<Figure size 432x288 with 0 Axes>
kokoshkin
['kokoshkin-vospitanie.pkl']
Общественно-бытовая тема
Длинное рассуждение (о высоких темах)
Свадьба/жених/невеста
Общественно-бытовая тема
Общественно-бытовая тема
<Figure size 432x288 with 0 Axes>
kropotov
['kropotov-fomushka.pkl']
Общественно-бытовая тема
О себе
Длинное рассуждение (о высоких темах)
Общественно-бытовая тема
Общественно-бытовая тема
<Figure size 432x288 with 0 Axes>
krylov
['krylov-podschipa-ili-trumf.pkl', 'krylov-sonnyj-poroshok.pkl', 'krylov-pirog.pkl', 'krylov-prokazniki.pkl', 'krylov-filomela.pkl', 'krylov-amerikantsy.pkl', 'krylov-modnaja-lavka.pkl', 'krylov-urok-dochkam.pkl']
Общественно-бытовая тема
О себе
Эмоциональное высказывание
Эмоциональное высказывание
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
lazhechnikov
['lazhechnikov-okopirovalsya.pkl']
Общественно-бытовая тема
Общественно-бытовая тема
Семейный отношения(Бог как отец)
О деньгах
Общественно-бытовая тема
<Figure size 432x288 with 0 Axes>
lensky
['lensky-horosha-i-durna.pkl']
Общественно-бытовая тема
Брат/сестра
Свадьба/жених/невеста
Брат/сестра
Брат/сестра
<Figure size 432x288 with 0 Axes>
lermontov
['lermontov-strannyj-chelovek.pkl', 'lermontov-menschen-und-leidenschaften.pkl', 'lermontov-maskarad.pkl']
Общественно-бытовая тема
Длинное рассуждение (о высоких темах)
Чувство/религия/мифология
Чувство/религия/мифология
Длинное рассуждение (о высоких темах)
<Figure size 432x288 with 0 Axes>
leskov
['leskov-rastochitel.pkl']
Длинное рассуждение (о высоких темах)
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
<Figure size 432x288 with 0 Axes>
lomonosov
['lomonosov-tamira-i-selim.pkl', 'lomonosov-demofont.pkl']
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
<Figure size 432x288 with 0 Axes>
majkov
['majkov-agriopa.pkl', 'majkov-femist-i-ieronima.pkl']
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
mamin
['mamin-sibirjak-malenkaja-pravda.pkl', 'mamin-sibirjak-zolotopromyshlenniki.pkl']
Обращение по имени отчеству
Обращение по имени отчеству
Обращение по имени отчеству
Обращение по имени отчеству
Обращение по имени отчеству
<Figure size 432x288 with 0 Axes>
mayakovsky
['mayakovsky-klop.pkl', 'mayakovsky-banja.pkl', 'mayakovsky-misteriya-buff.pkl']
Общественно-бытовая тема
Мнение о человеке/людях/группе лиц
Мнение о человеке/людях/группе лиц
Общественно-бытовая тема
Мнение о человеке/людях/группе лиц
<Figure size 432x288 with 0 Axes>
merezhkovsky
['merezhkovsky-pavel-pervyj.pkl']
Эмоциональное высказывание
Князь/царь/король/власть
Фраза с троеточием(эмоция)
Князь/царь/король/власть
Обращение/восклицание
<Figure size 432x288 with 0 Axes>
naydyonov
['naydyonov-deti-vanjushina.pkl']
Семейный отношения(Бог как отец)
Мнение/действие
Семейный отношения(Бог как отец)
О передвижении
Вопрос
<Figure size 432x288 with 0 Axes>
nekrasov
['nekrasov-zabrakovannye.pkl', 'nekrasov-akter.pkl', 'nekrasov-shila-v-meshke-ne-utaish.pkl']
Длинное рассуждение (о высоких темах)
Общественно-бытовая тема
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
Эмоциональное высказывание
<Figure size 432x288 with 0 Axes>
nikolev
['nikolev-samolyubivyj-stihotvorec.pkl']
Чувство/религия/мифология
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
Общественно-бытовая тема
Эмоциональное восклицание
<Figure size 432x288 with 0 Axes>
ostrovsky
['ostrovsky-bednaja-nevesta.pkl', 'ostrovsky-svoi-sobaki-gryzutsya-chuzhaya-ne-pristavaj.pkl', 'ostrovsky-trudovoj-hleb.pkl', 'ostrovsky-greh-da-beda-na-kogo-ne-zhivet.pkl', 'ostrovsky-ne-v-svoi-sani-ne-sadis.pkl', 'ostrovsky-puchina.pkl', 'ostrovsky-pozdnyaya-lyubov.pkl', 'ostrovsky-bez-viny-vinovatye.pkl', 'ostrovsky-na-bojkom-meste.pkl', 'ostrovsky-na-vsyakogo-mudreca-dovolno-prostoty.pkl']
Мнение о человеке/людях/группе лиц
Высказывание о себе или других людях
Мнение о человеке/людях/группе лиц
Мнение о человеке/людях/группе лиц
Высказывание о себе или других людях
<Figure size 432x288 with 0 Axes>
ozerov
['ozerov-dmitrij-donskoj.pkl']
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
Чувство/религия/мифология
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
petrov
['petrov-ostrov-mira.pkl']
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
Обращение/восклицание
Эмоциональное восклицание
<Figure size 432x288 with 0 Axes>
pisarev
['pisarev-naslednica.pkl', 'pisarev-lukavin.pkl', 'pisarev-poezdka-v-kronshtadt.pkl']
Высказывание о себе или других людях
Высказывание о себе или других людях
Высказывание о себе или других людях
Высказывание о себе или других людях
Общественно-бытовая тема
<Figure size 432x288 with 0 Axes>
pisemskij
['pisemskij-gorkaja-sudbina.pkl']
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
Эмоциональное высказывание
Общественно-бытовая тема
<Figure size 432x288 with 0 Axes>
plavilshchikov
['plavilshchikov-sgovor-kutejkina.pkl', 'plavilshchikov-ermak-pokoritel-sibiri.pkl']
Длинное рассуждение (о высоких темах)
Семейный отношения(Бог как отец)
О действии
Свадьба/жених/невеста
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
prutkov
['prutkov-fantaziya.pkl', 'prutkov-chereposlov-sirech-frenolog.pkl', 'prutkov-blondy.pkl', 'prutkov-srodstvo-mirovyh-sil.pkl']
Общественно-бытовая тема
О себе
О себе
Эмоциональное высказывание
Эмоциональное высказывание
<Figure size 432x288 with 0 Axes>
pushkin
['pushkin-boris-godunov.pkl', 'pushkin-kamenniy-gost.pkl', 'pushkin-rusalka.pkl', 'pushkin-skupoj-rytsar.pkl']
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
Длинное рассуждение (о высоких темах)
<Figure size 432x288 with 0 Axes>
rostopchina
['rostopchina-neludimka.pkl']
Эмоциональное высказывание
Высказывание о себе или других людях
Высказывание о себе или других людях
Чувство/религия/мифология
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
saltykov
['saltykov-shchedrin-smert-pazuhina.pkl']
Обращение по имени отчеству
Обращение по имени отчеству
Обращение по имени отчеству
Общественно-бытовая тема
Общественно-бытовая тема
<Figure size 432x288 with 0 Axes>
shakhovskoy
['shakhovskoy-ne-lubo-ne-slushai.pkl', 'shakhovskoy-pustodomy.pkl', 'shakhovskoy-svoya-semya.pkl', 'shakhovskoy-urok-koketkam.pkl']
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
О себе
<Figure size 432x288 with 0 Axes>
sollogub
['sollogub-chinovnik.pkl']
Вопрос
Высказывание о себе или других людях
Общественно-бытовая тема
Высказывание о себе или других людях
О себе
<Figure size 432x288 with 0 Axes>
sudovshchikov
['sudovshchikov-neslyhannoe-divo.pkl']
Свадьба/жених/невеста
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
sukhovo
['sukhovo-kobylin-smert-tarelkina.pkl', 'sukhovo-kobylin-svadba-krechinskogo.pkl', 'sukhovo-kobylin-delo.pkl']
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
Общественно-бытовая тема
<Figure size 432x288 with 0 Axes>
sumarokov
['sumarokov-opekun.pkl', 'sumarokov-pridanoe-obmanom.pkl', 'sumarokov-gamlet.pkl', 'sumarokov-vzdorschitsa.pkl', 'sumarokov-horev.pkl', 'sumarokov-dimitrij-samozvanets.pkl', 'sumarokov-semira.pkl', 'sumarokov-artistona.pkl', 'sumarokov-rogonosets-po-voobrazheniju.pkl', 'sumarokov-chudovischi.pkl']
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
Чувство/религия/мифология
<Figure size 432x288 with 0 Axes>
tolstoy
['tolstoy-zhivoy-trup.pkl', 'tolstoy-tsar-fedor-ioannovich.pkl', 'tolstoy-smert-ioanna-groznogo.pkl', 'tolstoy-vlast-tmy.pkl', 'tolstoy-tsar-boris.pkl']
Князь/царь/король/власть
Князь/царь/король/власть
Князь/царь/король/власть
Князь/царь/король/власть
Князь/царь/король/власть
<Figure size 432x288 with 0 Axes>
tretyakov
['tretyakov-protivogazy.pkl']
Быт/передвижения
Быт/передвижения
Быт/передвижения
Короткий ответ
Короткий ответ
<Figure size 432x288 with 0 Axes>
turgenev
['turgenev-mesjats-v-derevne.pkl', 'turgenev-holostjak.pkl', 'turgenev-neostorozhnost.pkl', 'turgenev-zavtrak-u-predvoditelja.pkl', 'turgenev-provintsialka.pkl']
Высказывание о себе или других людях
Обращение по имени отчеству
Обращение по имени отчеству
Высказывание о себе или других людях
Высказывание о себе или других людях
<Figure size 432x288 with 0 Axes>
zagoskin
['zagoskin-blagorodnyj-teatr.pkl']
Общественно-бытовая тема
Эмоциональное восклицание
Общественно-бытовая тема
Общественно-бытовая тема
Эмоциональное восклицание
<Figure size 432x288 with 0 Axes>
<Figure size 432x288 with 0 Axes>
In [ ]:
sents_sets_for_clusters = {}
for ngram, sents_sets in tqdm(ngrams_sents.items()):
    if ngram != '':
        huge_cluster = ngram_to_clusters[ngram]
        if sents_sets_for_clusters.get(huge_cluster) is None:
            sents_sets_for_clusters[huge_cluster] = sents_sets
        else:
            sents_sets_for_clusters[huge_cluster] = sents_sets_for_clusters[huge_cluster] + sents_sets
In [ ]:
# ngram_clusters_names[49] = 'Диалоги с территориальными вопросами (о движении/местонахождении)'
In [ ]:
clusters_quality = {}
for curr_cluster in [49, 28, 1]:
    cluster_sents = sents_sets_for_clusters[curr_cluster]
    curr_clust_q = clusters_quality.get(curr_cluster, {'good': 0, 'bad': 0, 'percent': 0})
    print (curr_clust_q)
    for i, sent in enumerate(random.choices(cluster_sents, k=100)):
        print(ngram_clusters_names[curr_cluster] + '_' + str(i))
        print('\n')
        print('\n'.join(sent))
        goodness = int(input())
        if goodness == 1:
            curr_clust_q['good'] += 1
        else:
            curr_clust_q['bad'] += 1
        curr_clust_q['percent'] = curr_clust_q['good'] / (curr_clust_q['good'] + curr_clust_q['bad'])
        print(curr_clust_q)
        print('=================================')
        clusters_quality[curr_cluster] = curr_clust_q
        if curr_clust_q['good'] + curr_clust_q['bad'] > 100:
            break
clusters_quality
In [268]:
ngram_clusters_names[49]
Out[268]:
'Диалоги с территориальными вопросами (о движении/местонахождении)'
In [269]:

Out[269]:
{'Свадьба/жених/невеста': 0.310515873015873,
 'Длинная фраза про общество/страну/общественное положение/работу/быт': 0.29484126984126985,
 'О деньгах': 0.2466269841269841,
 'Эмоциональное высказывание': 0.13055555555555556,
 'Короткая фраза с троеточием': 0.1400793650793651,
 'Вопрос': 0.10119047619047618,
 'О жене/муже/отношениях': 0.08829365079365079,
 'Эмоциональное восклицание': 0.08571428571428572,
 'Фраза с троеточием(эмоция)': 0.07896825396825397,
 'Обращение по имени отчеству': 0.07103174603174603,
 'О любви': 0.06805555555555556,
 'О женщине': 0.06349206349206349,
 'О действии': 0.03412698412698413,
 'Хозяйство/еда/время': 0.029761904761904764,
 'Мнение о человеке/людях/группе лиц': 0.025,
 'Быт/передвижения': 0.014484126984126986,
 'Мнение/действие': 0.014285714285714287,
 'Эмоциональное высказывние/вопрос': 0.00892857142857143,
 'Князь/царь/король/власть': 0.006944444444444445,
 'О себе': 0.0,
 'Молчание/разговор': 0.0}
In [ ]:
for cl in clusters_quality:
    print(ngram_clusters_names[cl])
    print(clusters_quality[cl])
    print('\n')
In [ ]:
# {'blok-neznakomka_6_0_60': 117,
#  'blok-neznakomka_6_1_76': 118,
#  'blok-neznakomka_6_2_55': 119,
#  'blok-korol-na-ploschadi_30_0_92': 590,
#  'blok-korol-na-ploschadi_30_1_86': 591,
#  'blok-korol-na-ploschadi_30_2_95': 592,
#  'blok-balaganchik_168_0_77': 3730}
def final_cluster_text(per_text, cluster_model, cluster_seq_emb, ngram_kmeans, cluster_names={}, sent_to_vector_dict={}):
    output = []
    all_clusters = []
    for person, sent in per_text:
        if sent in sent_to_vector_dict:
            sent_vec = sent_to_vector_dict[sent]
        else:
            sent_vec = get_sent_vector(sent)
        if sent_vec is not None:
            cluster =  clust_model_kmeans.predict([sent_vec])[0]
            sents = {sent: cluster_names.get(cluster, str(cluster))}
            output.append((person, sents))
            all_clusters.append(cluster)
    ngrams = ngrams_from_vec(all_clusters, n=3)
    ngram_vecs = [cluster_seq_emb.predict([[[clust_model_kmeans.cluster_centers_[cl] for cl in ngram]]])[0][-1] for ngram in ngrams]
    huge_clusters_in_this_text = ngram_kmeans.predict(ngram_vecs)
    return output, all_clusters, huge_clusters_in_this_text
parsed_text, _, huge_clusters = final_cluster_text(dramas_texts[96][0],
                                            clust_model_kmeans,
                                            cluster_seq_emb,
                                            ngram_kmeans,
                                            cluster_names,
                                            sent_to_vector_dict=sent_to_vector_dict)
for ngram_name in [ngram_clusters_names[cl] for cl in huge_clusters]:
    print('{} -> '.format(ngram_name))
print('\n')
i = -2
for person, rep in parsed_text:
    print(person)
    for phrase in rep:
        huge_clusters_for_this_phrase = set([ngram_clusters_names[cl] for cl in huge_clusters[max(0, i): i+3]])
        print(phrase + ': ' + colored(rep[phrase], 'red') + '\t' + colored(huge_clusters_for_this_phrase, 'green'))
    i += 1
    print('\n')
In [ ]:
len(parsed_text)
In [ ]:
all_clusters = _
ngrams = ngrams_from_vec(all_clusters)
ngram_vecs = [cluster_seq_emb.predict([[[clust_model_kmeans.cluster_centers_[cl] for cl in ngram]]])[0][-1] for ngram in ngrams]
huge_clusters_in_this_text = ngram_kmeans.predict(ngram_vecs)
In [ ]:
huge_clusters_in_this_text
In [ ]:
cluster_seq_emb.predict([[[clust_model_kmeans.cluster_centers_[cl] for cl in [31,41,24]]]])[0][-1]
In [ ]:
cluster_names
In [ ]:
cluster_seq_emb.save('cluster_seq_emb.h5')
with open('kmeans_phrases.pkl', 'wb') as f:
    pickle.dump(clust_model_kmeans, f)
with open('kmeans_phrases_names.pkl', 'wb') as f:
    pickle.dump(cluster_names, f)
with open('kmeans_seqs.pkl', 'wb') as f:
    pickle.dump(ngram_kmeans, f)
with open('kmeans_seqs_names.pkl', 'wb') as f:
    pickle.dump(ngram_clusters_names, f)
In [ ]: